我有以下文件
more file
machine1 network netmask broadcast
如何在行中具有“网络网络掩码广播”字样的第一个单词之后添加“_NAME”?
备注sed还需要只匹配“网络网络掩码广播”,然后将_NAME添加到行中的第一个单词
示例:执行sed命令后需要获取的内容
machine1_NAME network netmask broadcast
答案 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