ファイルの特定の行の末尾にテキストを追加できる一連の UNIX コマンドを知っている人はいますか?
例えば
ライン1
2行目
3号線
4号線
ファイルが次のようになるように、テキスト「、追加情報」を3行目に追加したいと思います。
ライン1
2行目
3 行目、追加情報
4号線
awk では次のようになります。
awk '{s=$0; if( NR==3 ){ s=s ", Extra Information" } print s;}' myfile > newfile
適切な sed バージョン:
sed -e '3s/$/, Extra Information/' -i myfile
これは、ポータブルのバージョンですsed
(-i オプションなし):
sed '3s/$/Hello World/' myfile
myfile
修正されていないことに注意してください。
awk 'NR == 3 { print $0 ", extra information" } NR != 3' myfile
中括弧の前の部分は条件です: 3 行目にいる場合は、テキストを追加します。中括弧が省略されている場合、デフォルトのアクションは単に出力すること$0
です。必要に応じて、新しいファイルにリダイレクトするか、別のプログラムにパイプします。読んでいるのと同じファイルにリダイレクトすることはできません。一般的な回避策は、新しいファイルにリダイレクトし、コマンドが成功した場合に移動することです。
somecommand > oldfile.tmp && mv oldfile.tmp oldfile
sed -e "s/^Line 3/\0, extra info/" -i text.txt
パール:
perl -p -e's{\n}{, extra information\n} if $. ==3' myfile
$. は行番号です
追加情報を 1 行だけに追加したい場合は、sed/awk ワンライナーのいずれかを使用できます。
ファイルの (ほぼ) すべての行に何かを追加したい場合は、各行の追加情報を含む 2 つ目のファイルを作成し、次を使用する必要がありますpaste
。
$ cat myfile
line 1
line 2
line 3
line 4
$ cat extra
something
something else
$ paste myfile extra
line 1 something
line 2
line 3 something else
line 4