Line3
特定の最初の2行のコンテキスト以降にのみ変更できます。
具体的な文脈は次のとおりです。
Line2
LineEXTRA
ファイルに次のものが含まれています
Line1
Line2
Line3
-----
Line1
Line2
LineEXTRA
Line3
-----
Line1
Line2
Line3
このファイルに
Line1
Line2
Line3
-----
Line1
Line2
LineEXTRA
LineNEW
-----
Line1
Line2
Line3
私たちの試み
awk '/Line2/ {
print; getline; if ($0 ~ /Line3/) sub(/3/,"NEW")
}
{ print }' file
結果
Line1
Line2
LineNEW
-----
Line1
Line2
LineEXTRA
Line3
-----
Line1
Line2
LineNEW
それは私たちが望むものではありません。
他の試みはまったく機能しませんでした。
awk '/Line2\nLineEXTRA/ {
print; getline; if ($0 ~ /Line3/) sub(/3/,"NEW")
}
{ print }' file
答え1
このコードは希望の出力を提供します
awk '/Line2/ {
print; getline; if ($0 == "LineEXTRA"){print;getline; sub(/3/,"NEW")}
}
{ print }' file
答え2
@Dababiの答えは完璧です。
gnu-sedの別の亜種
sed -zr 's/(Line2\nLineEXTRA\nLine)3/\1NEW/g' ex
(sed -z
複数行のコンテキストに直接アクセスできるようにファイル全体を吸収します。このソリューションはギガバイトファイルには避けてください。)