GNU/Linux >> Linux の 問題 >  >> Linux

ファイルの各行の先頭に文字列を追加するにはどうすればよいですか?

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 はそれらすべてを魔法のように実行します。


Linux
  1. コマンドラインを使用してLinuxでtar.gzファイルを抽出する方法

  2. Vimの各行の先頭にテキストを挿入する方法

  3. ファイルの行をループする方法は?

  1. Vimでファイルの最初または最後に移動する[クイックヒント]

  2. 一致する各行の上下の行をgrepで印刷するにはどうすればよいですか?

  3. 各行の先頭にプレフィックス文字列を追加します

  1. Linuxでpostscriptまたはpdfファイルの各ページの下部にフッターを追加するにはどうすればよいですか?

  2. bashのフォルダ内の各ファイルの先頭に文字列を追加するにはどうすればよいですか?

  3. 連続して書き込まれるログ ファイルの各行に日付文字列を追加する方法