首页 > 解决方案 > 如果存在单词,如何替换世界,否则使用 sed 在行尾附加一个单词

问题描述

如果存在单词,如何替换世界,否则使用 sed 示例在行尾附加一个单词:

案例1:如果存在则替换之前 yzz :

 my name is xyz
    my father name is yzz
    i live at wert

如果 yzz 存在则替换后

 my name is xyz
 my father name is yzzsst
 i live at wert

情况2:如果不存在,则在替换之前 yzz

my name is xyz
my father name is 
i live at wert

更换后

my name is xyz
my father name is yzzsst
i live at wert

标签: bashshell

解决方案


我宁愿awk用它来做你可以这样做:

awk '/father name is WHATEVER/ {gsub(/WHATEVER/,"REPLACEMENT"); print ; next }
     /father name is$/ {print $0 " REPLACEMENT" ; next }
     {print}' INPUTFILE

第一个条件检查名称是否存在,替换并打印,并跳过此行的更多操作。下一个条件检查该行是否以 结尾,name is如果是,则打印它并附加REPLACEMENT。最后每隔一行被打印。

使用(GNU)sed,您可以尝试以下操作:

sed -n '/my father/!p; /my father/s/\( NAME$\)\|\($\)/ REPLACEDNAME/p'

但这只是一个快速的“hack”:默认情况下不打印任何内容(-n),但如果该行不匹配则my father打印它,否则检查是否NAME存在于 and of 行并替换它或者它是否不存在REPLACEDNAME. _


推荐阅读