我正在尝试在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.*",