これうまくいかないようです
The next example would delete everything between "ONE" and "TWO:"
#!/bin/sh
sed '
/ONE/ {
# append a line
N
# search for TWO on the second line
/\n.*TWO/ {
# found it - now edit making one line
s/ONE.*\n.*TWO/ONE TWO/
}
}' file
1と2の間のすべてを削除したかったです。含まれているファイルを試してみました。
[user5@mailserver ~]$ cat file
ONE
hello
TWO
しかし、出力は次のようになります
[user5@mailserver ~]$ ./test
ONE
hello
TWO
ONE TWO
私はそれを修正しようとすると思ったが、それはできなかった。
答え1
これは仕事をするでしょう
sed '/^ONE/,/TWO/{/^ONE/!{/TWO/!d}}' file
/^ONE/,/TWO/
ONE
upで始まる最初の行を見てください。TWO
{/^ONE/!
私の行が次から始まらない場合ONE
{/TWO/!d}}
私の行がTWO
次から始まらずに次のことをする場合delete
上記をまとめると次のようになります。
ONE
upで始まるすべてを見つけてくださいTWO
。別の確認を実行します。つまり、「ONE TWO」と一致しないアイテムを見つけ、and
残りを削除します。
答え2
私は使用します
sed 'N;N;s/ONE.*\n.*TWO/ONE TWO/' file
これらの2つのタスクは、タスクが機能するN
ように3行を一緒にリンクします。s
(これは元の例と非常に似ています)。