这里面有一个例子关联关于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
第二个不会。
另外,第二个也会删除最初的#
.