如何使用 SED 正确更改文件中的行



我正在尝试在OS X中使用bash的SED命令并失败。

我需要将这一行#"phpunit/phpunit:3.7.*",更改为相同但没有#(就像我的文件中的这个"phpunit/phpunit:3.7.*",

在 sed 中做到这一点的最佳方法是什么?

我试过这个:sed -i -e "s/#"phpunit/phpunit:3.7.*",/"phpunit/phpunit:3.7.*"," file.txt

但这行不通:(

我可以看到一个明显的错误,即您在正则表达式部分内使用替换分隔符(斜杠)。你必须转义它,比如:

sed -e "s/#"phpunit/phpunit:3.7.*",/"phpunit/phpunit:3.7.*",/" file.txt

改进可能是对要保留的内容进行分组,例如:

sed -e "s/#("phpunit/phpunit:3.7.*",)/1/" file.txt

两种解决方案均可产生:

"phpunit/phpunit:3.7.*",

我不使用OS X,所以我省略了-i开关。linux -i后面有一个空格就足够了,但在您的系统中,我认为您必须提供一个空白字符串,例如:-i''但不确定,因此请测试此部分。

为什么不直接使用类似的东西

sed 's/#//' file.txt

如果您需要更多具体信息,那么

sed 's/#"php/"php/' file.txt
$ cat input
#"phpunit/phpunit:3.7.*",

由于特殊字符*./,后面有一些严重的反斜杠:

$ sed  's/#"phpunit/phpunit:3.7.*",/"phpunit/phpunit:3.7.*",/' input
"phpunit/phpunit:3.7.*",

相关内容

  • 没有找到相关文章

最新更新