2

次のファイルが与えられた場合

$ cat a.txt
The quick brown fox jumps over the lazy dog

最初の部分は簡単に削除できますsed

$ sed 's/.*fox//' a.txt
 jumps over the lazy dog

D私はオプションで賢くしようとしました

D      Delete  up  to  the first embedded newline in the pattern space.

$ sed 's/fox/\n/; D' a.txt

ただし、これでは出力が得られません。私が試したのと同様sedのオプションを使用して、行の最初の部分を削除できますか?D

これは、前foxの部分が後の部分よりも短い場合に機能します。

$ sed 's/fox/\r/' a.txt
 jumps over the lazy dog
4

4 に答える 4

3

それへの1つの方法:

sed '/fox/{s/fox/\n/;D}' input 
于 2013-02-25T07:59:58.083 に答える
2

これはうまくいくかもしれません(GNU sed):

 sed 's/fox/\n/;T;D' file
于 2013-02-25T17:01:47.203 に答える
1

完全なヘルプテキストは次のとおりです。

最初の改行までのパターンスペースのテキストを削除します。テキストが残っている場合は、結果のパターンスペースでサイクルを再開します(新しい入力行を読み取らずに)。それ以外の場合は、通常の新しいサイクルを開始します。

Dサイクルを再開し、何も残らなくなるまで行を削除し続けるため、この例は機能しません。

本当に使用したい場合はDperrealの答えで十分です。あるいは、条件分岐(tまたはGNUのみT)を使用することをお勧めします。これがGNUとBSD互換のバージョンです:

parse.sed

s/fox/\
/
t del
b
:del
D

次のように実行します。

sed -f parse.sed a.txt

出力:

 jumps over the lazy dog
于 2013-02-25T08:21:26.530 に答える
0

これは、前foxの部分が後の部分よりも短い場合に機能します。

$ sed 's/fox/\r/' a.txt
 jumps over the lazy dog
于 2013-03-29T01:14:27.623 に答える