我有一个包含以下内容的文件
OPTIONS='--selinux-enabled -G dockerroot -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry my-demo-auto-images-releases-dev.cto.com --insecure-registry my-demo-auto-images-stable-dev.cto.com --insecure-registry my-demo-auto-images-releases-dev.cto.com --insecure-registry my-demo-auto-images-stable-dev.cto.com --insecure-registry my-demo-auto-images-snapshots-dev.cto.com'
DOCKER_CERT_PATH=/etc/docker
--insecure-registry my-demo-auto-images-releases-dev.cto.com
和--insecure-registry my-demo-auto-images-stable-dev.cto.com
有重复的条目我只需要保留一次上述条目。
文件应该如下所示
OPTIONS='--selinux-enabled -G dockerroot -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry my-demo-auto-images-releases-dev.cto.com --insecure-registry my-demo-auto-images-stable-dev.cto.com --insecure-registry my-demo-auto-images-snapshots-dev.cto.com'
DOCKER_CERT_PATH=/etc/docker
参赛作品可以是任何顺序。
答案 0 :(得分:1)
试试这个:
sed 's/--insecure-registry my-demo-auto-images-stable-dev\.cto\.com//2g;s/--insecure-registry my-demo-auto-images-releases-dev\.cto\.com//2g' file
它会删除第二次出现的两个字符串。
<强>输出:强>
OPTIONS='--selinux-enabled -G dockerroot -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry my-demo-auto-images-releases-dev.cto.com --insecure-registry my-demo-auto-images-stable-dev.cto.com --insecure-registry my-demo-auto-images-snapshots-dev.cto.com '
DOCKER_CERT_PATH=/etc/docker
答案 1 :(得分:0)
这是我基于perl的解决方案:
perl -pe 'for my $s ("--insecure-registry my-demo-auto-images-releases-dev.cto.com","--insecure-registry my-demo-auto-images-stable-dev.cto.com") {if (($a,$b)=/^(.*?$s)(.+)$/s) {$b=~s/$s //g; $_="$a$b"}}' input.txt
我们的想法是我们分别处理每一行。我们将其分为两部分:第一部分包含所有内容,包括要删除的字符串(例如-insecure-registry my-demo-auto-images-releases-dev.cto.com
)。第二部分包含其他所有内容。然后我们从第二部分中删除所有出现的字符串。最后,我们连接两部分,然后输出。
答案 2 :(得分:0)
假设:--insecure
条目组合在一起朝行尾
主要逻辑是初始部分被分离出来,--insecure
条目放在一个数组中然后打印出唯一
$ perl -MList::MoreUtils=uniq -ne "if(/--insecure/){(@b)=/^(.*?)(?=--insecure.*)/; (@a)=/--insecure.*?(?= --|')/g; print \"@b\"; print join(' ',uniq(@a)); print \"'\n\"} else {print}" ip.txt
OPTIONS='--selinux-enabled -G dockerroot -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry my-demo-auto-images-releases-dev.cto.com --insecure-registry my-demo-auto-images-stable-dev.cto.com --insecure-registry my-demo-auto-images-snapshots-dev.cto.com'
DOCKER_CERT_PATH=/etc/docker