仅当某行位于指定的行号并且与模式匹配时,如何删除该行?

use*_*456 3 bash sed

仅当某行位于指定的行号并且与模式匹配时,如何删除该行?


例如:

  • 我要删除( d);
  • 所述第三线(3);
  • 如果它是空白的( ^$);

以下语法:

cat file | sed '3 /^$/d'
Run Code Online (Sandbox Code Playgroud)

返回以下错误:

sed: -e expression #1, char 3: unknown command: `/'
Run Code Online (Sandbox Code Playgroud)

use*_*001 10

尝试这样做:

sed '3{/^$/d;}' file
Run Code Online (Sandbox Code Playgroud)

注意大括号。

  • 由于此答案目前包含 _no_ 任何解释:行号(`3`)和模式(`/^$/`)都是指定如何匹配行的方式:每个命令只能以一个开头匹配方式。幸运的是,括号创建了一组命令,这些命令可以到达单个命令可以到达的任何地方。所以你可以做`42 { /regex/ d }`,或者`/regex/ { 42 d }`,或者在更复杂的情况下嵌套它们:`/foo/ { 1 { /bar/ d }; $ { /qux/ d } }` (9认同)