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