我想找到这个文件/path/to/file/profile.yaml是否包含以下值:
Cpanel::Easy::PHP5::Curl: 0
Cpanel::Easy::PHP5::CurlSSL: 0
如果是,则将1替换为0,如下所示:
Cpanel::Easy::PHP5::Curl: 1
Cpanel::Easy::PHP5::CurlSSL: 1
以及bash命令中的所有这些!
我该怎么做?
答案 0 :(得分:5)
sed
。 e.g:
sed -i 's/Cpanel::Easy::PHP5::Curl: 0/Cpanel::Easy::PHP5::Curl: 1/' myfile.txt
正如@kojiro所指出的那样,-i
不可移植,所以你可以随时这样做:
sed 's/Cpanel::Easy::PHP5::Curl: 0/Cpanel::Easy::PHP5::Curl: 1/' myfile.txt > tmp.txt
mv tmp.txt myfile.txt
答案 1 :(得分:2)
这应该有效 -
sed -r 's/(Cpanel::Easy::PHP5::Curl(SSL)?:) 0/\1 1/' yourfile
您可以将re-direct
输出到另一个文件,也可以-i
进行文件内替换。
答案 2 :(得分:2)
要一次更改两行(并重定向到另一个文件),您还可以使用perl:
perl -pe 's/Cpanel::Easy::PHP5::Curl(SSL)*: 0/Cpanel::Easy::PHP5::Curl$1: 1/' file1 > file2
答案 3 :(得分:1)
假设通过'bash命令',你的意思是你可以从bash提示符执行一个命令;如果是这样,那么你可以使用sed做你想做的事。
答案 4 :(得分:1)
如果是YAML,那么请使用正确的YAML模块。像Python这样的语言(我相信很多其他语言)都有可用的YAML模块。你可能已经安装了Python;你需要添加像http://pyyaml.org/这样的YAML包。
import yaml
with open("some_file","r") as source:
objects= yaml.load( source )
# change your Cpanel::Easy::PHP5::Curl values
with open("revised_file","w") as target:
yaml.dump( objects )
关于此的唯一“硬”部分是正在使用的命名空间层次结构。目前尚不清楚这将如何在Python中表现出来。您可能需要定义一些反映命名空间信息的包和类。