yae*_*ael 3 sed configuration text-processing
我们在 Linux 上的文件中有以下行:
discovery.uri=http://master.navada.com:8800
Run Code Online (Sandbox Code Playgroud)
我们想在koko之前添加这个词master,所以我只是这样做:
sed –i 's/master/kokomaster/' file
Run Code Online (Sandbox Code Playgroud)
这使:
discovery.uri=http://kokomaster.navada.com:8800
Run Code Online (Sandbox Code Playgroud)
但我们想要的是koko仅在koko之前不存在的情况下添加master。
例如,下次我们运行
sed –i 's/master/kokomaster/' file
Run Code Online (Sandbox Code Playgroud)
该行将是:
discovery.uri=http://kokokokomaster.navada.com:8800
Run Code Online (Sandbox Code Playgroud)
sed -i '/kokomaster/!s/master/koko&/' file
Run Code Online (Sandbox Code Playgroud)
首先测试该字符串是否kokomaster存在于行上,如果不存在,则进行替换。这几乎是“但我们想要的是koko仅koko在master单词之前不存在的情况下才将单词添加到”中的字面翻译sed。
的&在所述取代的替换部分将通过由图案部分(即匹配的文本被替换master)。
阅读评论后(见下文),您可能想要使用更具体的内容,实际上只会修改 URI 的服务器名称部分,而不是master其他地方的任何字符串,即使kokomaster在 URI 路径中出现(或未出现):
sed -i 's,^\(discovery\.uri=http://\)\(master\),\1koko\2,' file
Run Code Online (Sandbox Code Playgroud)
您甚至可能想要匹配您想要替换的确切和完整的行,只是为了避免甚至假设错误:
sed -i 's,^\(discovery\.uri=http://\)\(master\.navada\.com:8800\)$,\1koko\2,' file
Run Code Online (Sandbox Code Playgroud)
如果配置文件是用JSON或其他一些众所周知的格式,你会不会使用sed在所有的,但jq还是有些其他apropriate工具,专门用于处理这种格式的文件写入。
使用
sed 's/\(koko\)*master/kokomaster/'
Run Code Online (Sandbox Code Playgroud)
因此master,任意数量的前面的kokos 都会被替换。