繁体   English   中英

如果单词存在,如何替换世界,否则 append 使用 sed 在行尾的单词

[英]How to replace a world if word is exist otherwise append a word in the end of line using sed

如果单词存在,如何替换世界,否则 append 使用 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

我宁愿用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

您可以使用适用于这两种情况的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 )不是固定的,但它可能是任何东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM