回答:
echo ... | sed -e '3a test' -e '5a test'
この場合よりも操作が複雑な場合は、次のような構造を使用できます。
sed 'b pattern; : action; a \
lalala
b end; : pattern; 3b action; 5b action; : end'
つまりは、あなたが間を必要とするすべてのコマンド入れるb pattern;
とをb end;
。
そして、の後にすべてのパターン(行番号など)を追加します: pattern;
。
何が起こるか:
最初のコマンドは、アクション部分を飛び越えます(パターンが最初でb end;
、アクション部分の直前にあると、読みやすくなります)。
パターンが一致した場合、実行はアクション部分にジャンプします。アクションパーツの実行後、最後にジャンプします。
私はこれを片付けようとします:
sed '3b action; 5b action; b end; : action; a \
lalala
: end'
一行でのようになります:
sed "3b idAction; 5b idAction; b; : idAction; a test"
移植可能に、あなたはそれを書く必要があります:
sed '
3b action
5b action
b
: action
a\
lalala'
(b
最後までラベルが分岐しないため、明示的なend
ラベルは必要ありません。;
標準のsed
実装では、ラベル内の文字として有効です)。
とsed
(@HaukeLagingの回答を参照)
とawk
:
$ echo -e "a\nb\nc\nd\ne\nf\ng\nh" | awk 'NR==3 || NR==5{$0=$0"\ntest"}1;'
とperl
:
$ echo -e "a\nb\nc\nd\ne\nf\ng\nh" | perl -pe '$_ .="test\n" if $. == 3 || $. == 5'
perl -lnE 'say if $. ~~ @{[3,5]}'
~~
ません。また、両方say
と~~
perl v> = 5.10が必要ですか?
perl -pE 'say "test" if $. ~~ @{[4,6]}'
-これは行の先頭に追加されます。perl は指定されたプログラムの最後に-p
暗黙の出力を行います。