如果存在单词,如何替换世界,否则使用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
wfeng_bit 回答:如果存在单词,如何替换世界,否则使用sed在行末添加单词

我更愿意用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在行的和处存在,并替换该行;如果不存在,则替换行REPLACEDNAME

,

您可以使用适用于两种情况的awk

awk 'NR==2{sub(/( *yzz *)?$/," yzzst")} 1' file
,

您可以这样:

$ echo "$response" | sed -E "3 s/(.*)( [a-zA-Z]+ *$)/\1 DUDETRUSTME/g"

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

我假设您想替换第三行,但是您可以将3更改为任意数字,甚至是范围。我还假设您的目标词(在这种情况下为 yzz )不是固定的,但可能是任何东西。

本文链接:https://www.f2er.com/3107219.html

大家都在问