如何仅删除位于指定行号且与模式匹配的行?
例如:
- 我想要删除(
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
.