如何仅删除位于指定行号且与模式匹配的行?

如何仅删除位于指定行号且与模式匹配的行?

如何仅删除位于指定行号且与模式匹配的行?


例如:

  • 我想要删除( 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.

相关内容