キーワードを見つけて、下に2行のテキストを入力したいファイルがあります。
たとえば、私のファイルに次の単語が含まれているとします。
the
cow
goes
moo
私は「cow」という単語を探して、「cow」という単語の下の2行のファイルに「yay」というテキストを入力できるようにしたいと思います。
the
cow
goes
moo
yay
私はこれができると信じていますが、sed
それを機能させることはできません。
どんな助けでも大変感謝します。
答え1
$ cat ip.txt
the
cow
goes
moo
$ sed '/cow/{N;N; s/$/\nyay/}' ip.txt
the
cow
goes
moo
yay
N;N;
次の2行を取得します。s/$/\nyay/
別の行を追加
答え2
そしてawk
:
awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1'
/cow/
cow
レコードを一致させ、その行を{print; getline; print; getline; print; print "yay"; next}
印刷し、次の行を取得し、getline
それも印刷し、次の行にも同じように印刷してから、印刷して次の行にyay
移動します(next
)1
(true) は、残りの行をデフォルトのジョブとして印刷します。
警告する:
- 検索中のパターンとEOFの間に2行未満がある場合、そのパターンで始まる最後の行が繰り返され、その間に2行が形成されます。
例:
% cat file.txt
the
cow
goes
moo
% awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1' file.txt
the
cow
goes
moo
yay
答え3
その他sed
sed '/cow/! b;n;n;a\yay' file.txt
その他アッ
awk '{print;this--};/cow/{this=2}! this{print "yay"}' file.txt
答え4
そしてed
ed file << EOF
/cow/+2a
yay
.
,p
q
EOF
修正された出力を印刷するか
ed file << EOF
/cow/+2a
yay
.
wq
EOF
または(bash
一行で)
printf '%b\n' '/cow/+2a' 'yay\n.' 'wq' | ed file
変更を所定の位置に記録します。