行の先頭の「-from」を「this」に変更したいと思います。行の末尾に「R」があり、その上の行の末尾に「D」がある場合、これが発生します。
たとえば、以下に示すブロックは次のとおりです。
-from XXXXXXXXXXXXXXXXX/D
-from XXXXXXXXXXXXXXXXX/R
-from XXXXXXXXXXXXXXXXX/K
-from XXXXXXXXXXXXXXXXX/L
-from XXXXXXXXXXXXXXXXX/G
-from XXXXXXXXXXXXXXXXX/R
出力は次のようになります。
-from XXXXXXXXXXXXXXXXX/D
-this XXXXXXXXXXXXXXXXX/R
-from XXXXXXXXXXXXXXXXX/K
-from XXXXXXXXXXXXXXXXX/L
-from XXXXXXXXXXXXXXXXX/G
-from XXXXXXXXXXXXXXXXX/R
すべて大丈夫、、、、sed
などawk
。grep
答え1
- 前の行が
D
終わったら、- 現在行が
R
終わったら、- 次に、最初の単語(
-from
)をに置き換える必要があります-this
。
- 次に、最初の単語(
- 現在行が
awk
スクリプト:
# if the prev. line ended with D, and the current with R, replace first word
# optionally add && $1 == "-from"
has_d && /R$/ { $1 = "-this"; }
# print the current line, pretend that d is not matched yet
{ print; has_d = 0; }
# if line ends with D, set flag
/D$/ { has_d = 1; }
短い冗談:
awk 'has_d&&/R$/{$1="-this"}{print;has_d=0}/D$/{has_d=1}' yourfile
答え2
存在するsed
:
sed '/D$/{N;/R$/s/\n-from/\n-this/}' your_file
拡張コメント:
sed ' /D$/{ # If the current line ends in D
N; # Append the next line to the pattern space
/R$/s/\n-from/\n-this/ # If you find R at end-of-line, substitute
}' your_file