ソースファイル:
$cat test.file
aaa
bbb
ccc
2行目に挿入したいのですが、echo test> /var/tmp/file
必要な結果は次のとおりです。
$ cat test.file
aaa
echo test > /var/tmp/file
bbb
ccc
以下を試しましたが失敗しました:(
$ sed -i "2 s/^/echo test > /var/tmp/file\n/" test.file
sed: -e expression #1, char 20: unknown option to `s'
$ sed -i "2 s/^/"echo test > /var/tmp/file"\n/" test.file
-bash: /var/tmp/file\n/: Is a directory
答え1
努力する:
sed '2i echo test > /var/tmp/file' infile
2i
2行目にテキストを挿入すると言います。
独自のソリューションも機能するはずですが、テキストに追加/
したいものがあり、それ自体が文字を代替文字として使用するため、互いに競合します。sed
/
この問題を解決する方法は2つあります。
sed
/
代替文字を入力ファイルにない他の文字に変更します。sed '2 s:^:echo test > /var/tmp/file\n:' infile
/
ファイルに追加するテキストのすべての文字をエスケープします。sed '2 s/^/echo test > \/var\/tmp\/file\n/' infile
-i
結果がうまくいったら、内部置換用のスイッチをコマンドに追加します。
sed -i '2 s/^/echo test > \/var\/tmp\/file\n/' infile
答え2
これにより、文字をエスケープする必要がなくなります。ファイル読み取りコマンドは、r
指定された行番号の後ろ(この場合はIine#1の後ろ)にファイルの内容を配置します。
$ echo 'echo test > /var/tmp/file' \
| sed -i '1r /dev/stdin' file