1 行の awk コマンドでも同じことができます:
awk '{print "prefix" $0}' file
ループ全体は、ファイル全体を操作する単一の sed コマンドに置き換えることができます:
sed -e 's/^/prefix/' $file
元のエラーについて:
<ブロック引用>./appendToFile.sh:11 行目:/bin/sed:引数リストが長すぎます
問題はこのコード行にあります:
sed -e 's/^/prefix/' $line
$line
このコンテキストでは ファイル名 です そのsed 反対しています。コードを修正するには、次の行を次のように修正する必要があります:
echo $line | sed -e 's/^/prefix/'
(元のコードに < $file
を含めないことにも注意してください。 最後に。)
William Pursell は、両方の提案でこの問題に正しく対処しています。
ただし、元のテキスト ファイルに問題があることは正しく認識されていると思います。 dos2unix
行末のキャリッジ リターン Windows スティックを削除するだけなので、この問題は修正されません。 (ただし、Windows で Linux ファイルを読み取ろうとすると、リターンのない巨大な行が表示されます。)
テキスト ファイルの行末文字に問題がないと仮定すると、William Pursell、Andy Lester、または nullrevolution の回答が機能します。
while read...
のバリエーション 提案:
while read -r line; do echo "PREFIX " $line; done < $file
これは、シェルから直接実行できます (バッチ / スクリプト ファイルは必要ありません):
while read -r line; do echo "kp" $line; done < stusers.txt
これを行う Perl の方法は次のようになります:
perl -p -e's/^/prefix' filename
または
perl -p -e'$_ = "prefix $_"' filename
どちらの場合でも、それは filename
から読み取ります 接頭辞付きの行を STDOUT に出力します。
-i
を追加すると フラグの場合、Perl はその場でファイルを変更します。複数のファイル名を指定することもでき、Perl はそれらすべてを魔法のように実行します。