sed中替换命令前模式的用法是什么

Maj*_*imi 3 sed regular-expression

链接中有一个关于以下内容的示例sed

要删除所有以“#”开头的行的第一个数字,请使用:

sed '/^#/ s/[0-9][0-9]*//'
Run Code Online (Sandbox Code Playgroud)

第一个模式(/^#/)的好处是什么?可能很简单:

sed 's/^#[0-9][0-9]*//'
Run Code Online (Sandbox Code Playgroud)

jw0*_*013 6

sed命令的一般格式是

[address[,address]] function
Run Code Online (Sandbox Code Playgroud)

当命令具有单个地址时,它会在与该地址匹配的所有行上运行。当命令没有地址时,它在每一行上运行。

参考:POSIXsed


关于你的具体例子:

  • /^#/ s/[0-9][0-9]*//

    • 此命令有一个地址 ,/^#/它匹配所有以 开头的行#

    • 替换模式是/[0-9][0-9]*/。这匹配行中出现的第一个数字序列。

    • 简单的英文摘要:删除每行中以#.开头的第一个数字序列。

    • 例子# non-digits|5555|non-digits|5555变成# non-digits||non-digits|5555

  • s/^#[0-9][0-9]*//

    • 没有地址,所以这个命令在每一行上运行。

    • 替换模式/^#[0-9][0-9]*/匹配以# 锚定在行首的连续数字序列。

    • 简单的英语摘要#从每一行的开头删除后跟一个数字序列(并且只有那个模式)。

    • 示例:#5555|non-digits|5555变为|non-digits|5555,但 # non-digits|5555|non-digits|5555由于替换模式不匹配而未更改。