用sed替换整行内联,但跳过以#

时间:2018-03-05 23:03:27

标签: sed

我正在尝试使用运行其标准Ubuntu风格的EC2 Amazon实例中的sed进行内联替换,但我似乎无法找出正确的语法。

基本上我需要在几个位置编辑java.security文件,因此我使用find + sed来执行此操作,并且按预期完美运行但是,当测试时完成后我会进行清理,我想将它恢复到我想要的预期默认值,这就是我正在运行intro的麻烦。

这就是我的股票文件的样子:

:/etc/java-8-oracle/security# cat java.security | grep jdk.tls.disabledAlgorithms
#   jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768

我想用另一个值(不是追加)替换第二行。

如果我这样做:

find / -name java.security -type f -exec sed -i  's/jdk.tls.disabledAlgorithms=*/jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768/g' {} +

它只会附加它,所以每次运行时我都会得到一个越来越长且无用的字符串。

但如果我这样做:

find / -name java.security -type f -exec sed -i  '/jdk.tls.disabledAlgorithms=*/c\jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768' {} +

它替换了我想要的字符串和注释的示例,它留下了2个相同和未注释的行。

我正在使用find,因为我需要同时在不同位置编辑3个文件。我现在将其缩小到/仅用于测试和试用/错误目的。

任何人都知道我搞砸了什么或者我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

您已在评论中找到了有效的解决方案:优化您的正则表达式,仅匹配以teddy@***:~/***$ npm start > electron-quick-start@1.0.0 start /Users/teddy/*** > electron . The file /Applications/PyCharm.app does not exist. npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! electron-quick-start@1.0.0 start: `electron .` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the electron-quick-start@1.0.0 start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! /Users/teddy/.npm/_logs/2018-03-25T09_57_37_106Z-debug.log 开头的条目。我仍然选择发布一个答案,因为你提出的问题(或者至少它的标题)略有不同,我觉得有必要详细说明,如果你仍然好奇,还有其他人找到了她的答案如何跳过特定的行。所以我们走了:

在像jdk.tls.disabledAlgorithms这样的sed命令之前可以加上它们适用的地址或地址范围,所以在此之前:

s

将每个$ sed -i 's@\(jdk.tls.disabledAlgorithms=\).*@\1NEWVALUES < 768@g' FILE 替换为jdk.tls.disabledAlgorithms

NEWVALUES

对于第一个字符为$ sed -i '/^#/!s@\(jdk.tls.disabledAlgorithms=\).*@\1NEWLIST < 768@g' FILE 的任何行,都不会这样做。 #匹配此类行,/^#/是逻辑!。仅对不匹配的行执行命令。

我还使用了反向引用(以缩短线条,降低拼写错误的风险,也可以在维护期间)。我使用not而不是@,因为我试图寻找更具视觉冲突的分隔符,特别是如果我有其他(背面)斜线。如果您希望与所有人保持一致,则可以将/替换为/^#/

一般情况下,尽管建议您编写正则表达式以准确匹配您想要匹配的内容。