31

テキストファイルを1行ずつループする次のbashコードがあります..作業の「プレフィックス」を各行に追加しようとしていますが、代わりにこのエラーが発生しています:

rob@laptop:~/Desktop$ ./appendToFile.sh stusers.txt kp
stusers.txt
kp
./appendToFile.sh: line 11: /bin/sed: Argument list too long
115000_210org@house.com,passw0rd

これはbashスクリプトです..

#!/bin/bash

file=$1
string=$2

echo "$file"
echo "$string"

for line in `cat $file`
do
    sed -e 's/^/prefix/' $line
    echo "$line"
done < $file

ここで何が間違っていますか?

更新: ファイルでヘッド ダンプを実行すると、すべての行が端末の 1 行にダンプされます。おそらく関連していますか?

rob@laptop:~/Desktop$ head stusers.txt
rob@laptop:~/Desktop$ ouse.com,passw0rd
4

8 に答える 8

63

1 行の awk コマンドでも同じことができます。

awk '{print "prefix" $0}' file
于 2012-11-27T15:27:56.940 に答える
10

ループ全体は、ファイル全体を操作する単一の sed コマンドに置き換えることができます。

sed -e 's/^/prefix/' $file
于 2013-11-29T15:40:57.430 に答える
4

for ループの代わりに、以下を使用する方が適切while read...です。

while read -r line; do
do
    echo "$line" | sed -e 's/^/prefix/'
done < $file

しかし、より単純な方がはるかに良いでしょう:

sed -e 's/^/prefix/' $file
于 2012-11-27T14:29:11.110 に答える
4

それを行う Perl の方法は次のようになります。

perl -p -e's/^/prefix' filename

また

perl -p -e'$_ = "prefix $_"' filename

いずれの場合もfilename、プレフィックス付きの行を読み取り、STDOUT に出力します。

フラグを追加する-iと、Perl はその場でファイルを変更します。複数のファイル名を指定することもでき、Perl はそれらすべてを魔法のように実行します。

于 2012-11-27T14:47:29.163 に答える
0
sed -i '1a\
Your Text' file1 file2 file3
于 2021-11-13T00:15:25.177 に答える
0

sed は必要ありません。echo コマンドで文字列を連結するだけです。

while IFS= read -r line; do
    echo "prefix$line"
done < filename

ループは、ファイル内の各単語を繰り返します。

for line in `cat file`; ...
于 2012-11-27T16:04:11.800 に答える