如何使用sed替换基于变量匹配的行

时间:2014-09-19 22:52:20

标签: sed

是否可以使用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

1 个答案:

答案 0 :(得分:2)

尝试:

sed '/^541ce0a0c3b4f843ec000001/ s/guest/unwanted-guest/' 

我们在通常的sed替换命令前放置了一个条件。条件是:

/^541ce0a0c3b4f843ec000001/

此条件限制sed仅考虑以541ce0a0c3b4f843ec000001开头的行(插入符^表示必须在行开头)。替代命令是:

s/guest/unwanted-guest/

这会替换第guestunwanted-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