指定した行番号にあり、パターンに一致する場合にのみ行を削除するにはどうすればよいでしょうか?
例えば:
- したい消去(
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
は十分ですが、その出力のみが表示されます。 ファイルを変更する場合、 がsed
GNU であれば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
。