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

sed+;匹配行并在行中的第一个字符串上添加单词,sed,Sed,我有以下文件 more file machine1 network netmask broadcast 如何在包含“网络掩码广播”单词的行中的第一个单词后添加“_NAME” 备注sed还需要只匹配“网络网络掩码广播”,然后在行中的第一个单词中添加_NAME 示例:执行sed命令后需要得到什么 machine1_NAME network netmask broadcast 这应该是可行的,因为我们没有使用g修饰符,它每行只匹配一次 sed -e 's/^[^ ]*

我有以下文件

    more file
    machine1  network netmask  broadcast
如何在包含“网络掩码广播”单词的行中的第一个单词后添加“_NAME”

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

示例:执行sed命令后需要得到什么

   machine1_NAME  network netmask  broadcast

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

sed -e 's/^[^ ]*\>/&_NAME/'
它匹配第一个单词边界前的非空格字符,将其替换为自身并附加
\u NAME
。如前所述,如果没有
g
修饰符,则每行只匹配一次,如果行上有前导空格,只需删除第一个
^
-anchor

编辑
您只希望它与特定的行匹配,因此:

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

第一部分是选择器,它确保仅在
网络掩码广播
结束行的行上执行替换。要使其与这些单词匹配,只需删除
$
-锚定符,并在空格中添加
*
(空格星号)以使其灵活。但你可能已经知道了……)

@roe:sed的一些版本不需要
-e
。对不起,我只是想帮你,e从来没有错,但是不使用它可能是不正确的,也就是说,使用它会更安全。“我的坏孩子!”丹尼斯;是的,但不幸的是,不是全部。我很确定Solaris sed确实需要它,而且这里没有提到GNU sed。仅供参考,我认为只有在命令行上提供多条指令时才需要-e。当只有1条指令时,sed可以在不使用“e”的情况下计算出来
sed '/network.*netmask.*broadcast/s|^\([ \t]*\)\(.[^ \t]*\) |\1\2_NAME|' file