指定した行番号にあり、パターンに一致する場合にのみ行を削除するにはどうすればよいでしょうか?

指定した行番号にあり、パターンに一致する場合にのみ行を削除するにはどうすればよいでしょうか?

指定した行番号にあり、パターンに一致する場合にのみ行を削除するにはどうすればよいでしょうか?


例えば:

  • したい消去d);
  • 三番目ライン (3);
  • もし空白^$);

次の構文:

cat file | sed '3 /^$/d'

次のエラーを返します:

sed: -e expression #1, char 3: unknown command: `/'

答え1

次のことを試してください:

sed '3{/^$/d;}' file

中括弧に注意してください。

答え2

user000001 さんが回答したように、sed '3{/^$/d;}' fileは十分ですが、その出力のみが表示されます。 ファイルを変更する場合、 がsedGNU であればsed、 を使用できますsed -i '3{/^$/d}' file(GNU の場合sed、ここで;}の も省略できます)。

`-i[SUFFIX]'
`--in-place[=SUFFIX]'
     This option specifies that files are to be edited in-place.  GNU
     `sed' does this by creating a temporary file and sending output to
     this file rather than to the standard output.(1).

FreeBSD/OS/X の場合はsedを使用しますsed -i '' '3{/^$/d;}' file

関連情報