sed中替换命令之前的模式有什么用

sed中替换命令之前的模式有什么用

这里面有一个例子关联关于sed

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

sed '/^#/ s/[0-9][0-9]*//'

第一个模式()有什么好处/^#/?它可以简单地是:

sed 's/^#[0-9][0-9]*//'

答案1

命令的一般格式sed

[address[,address]] function

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

参考: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]*/与前面带有 a 的连续数字序列相匹配# 锚定的在该行的开头。

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

    • 例子:#5555|non-digits|5555变为|non-digits|5555,但 # non-digits|5555|non-digits|5555由于替换模式不匹配而保持不变。

答案2

第一个将匹配并替换:

#abc99

第二个不会。

另外,第二个也会删除最初的#.

相关内容