如果存在单词,如何替换世界,否则使用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
答案 0 :(得分:0)
我更愿意用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
。
答案 1 :(得分:0)
您可以使用适用于两种情况的awk
:
awk 'NR==2{sub(/( *yzz *)?$/, " yzzst")} 1' file
答案 2 :(得分:0)
您可以这样:
$ 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 )不是固定的,但可能是任何东西。