sed +匹配行并在第一个字符串上添加单词

时间:2010-08-30 11:58:05

标签: sed

我有以下文件

    more file
    machine1  network netmask  broadcast

如何在行中具有“网络网络掩码广播”字样的第一个单词之后添加“_NAME”?

备注sed还需要只匹配“网络网络掩码广播”,然后将_NAME添加到行中的第一个单词

示例:执行sed命令后需要获取的内容

   machine1_NAME  network netmask  broadcast

2 个答案:

答案 0 :(得分:3)

这应该有用,因为我们没有使用g修饰符,它每行只匹配一次

sed -e 's/^[^ ]*\>/&_NAME/'

它将非空格字符与第一个单词边界匹配,将其替换为自身并附加_NAME。如上所述,如果没有g修饰符,它每行只会匹配一次,如果该行上有前导空格,则只需删除第一个^ - 锚点。

修改
你只希望它在特定的行上匹配,所以这里是:

sed -e '/network netmask broadcast$/s/^[^ ]*\>/&_NAME/'

第一部分是选择器,它确保仅在network netmask broadcast结束行的行上执行替换。要让它与那些单词的任何行匹配,只需删除$ - 锚点,然后将*(空格星号)添加到空格中以使其灵活。但你可能已经知道......:)

答案 1 :(得分:1)

sed '/network.*netmask.*broadcast/s|^\([ \t]*\)\(.[^ \t]*\) |\1\2_NAME|' file