是否可以使用sed根据文本开头的条件匹配来替换某些文本...例如,对于以下文件,我只想将“guest”替换为“不需要的” -guest'仅适用于以模式开头的行' 541ce0a0c3b4f843ec000001'这是一个变量。
541ce0a0c3b4f843ec000001:x:1000:1000:OpenShift guest:/var/lib/openshift/541ce0a0c3b4f843ec000001:/usr/bin/oo-trap-user
541ce468c3b4f843ec000029:x:1001:1001:OpenShift guest:/var/lib/openshift/541ce468c3b4f843ec000029:/usr/bin/oo-trap-user
答案 0 :(得分:2)
尝试:
sed '/^541ce0a0c3b4f843ec000001/ s/guest/unwanted-guest/'
我们在通常的sed
替换命令前放置了一个条件。条件是:
/^541ce0a0c3b4f843ec000001/
此条件限制sed
仅考虑以541ce0a0c3b4f843ec000001
开头的行(插入符^
表示必须在行开头)。替代命令是:
s/guest/unwanted-guest/
这会替换第guest
行unwanted-guest
的第一次出现。
将此命令应用于示例输入(放在名为file
的文件中):
$ sed '/^541ce0a0c3b4f843ec000001/ s/guest/unwanted-guest/' file
541ce0a0c3b4f843ec000001:x:1000:1000:OpenShift unwanted-guest:/var/lib/openshift/541ce0a0c3b4f843ec000001:/usr/bin/oo-trap-user
541ce468c3b4f843ec000029:x:1001:1001:OpenShift guest:/var/lib/openshift/541ce468c3b4f843ec000029:/usr/bin/oo-trap-user
$ id=541ce0a0c3b4f843ec000001
$ sed "/^$id/ s/guest/unwanted-guest/" file
541ce0a0c3b4f843ec000001:x:1000:1000:OpenShift unwanted-guest:/var/lib/openshift/541ce0a0c3b4f843ec000001:/usr/bin/oo-trap-user
541ce468c3b4f843ec000029:x:1001:1001:OpenShift guest:/var/lib/openshift/541ce468c3b4f843ec000029:/usr/bin/oo-trap-user