是否可以使用一些bash命令查找/替换文件中的某些字符?

时间:2011-12-28 19:03:19

标签: bash replace find command yaml

我想找到这个文件/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命令中的所有这些!

我该怎么做?

5 个答案:

答案 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中表现出来。您可能需要定义一些反映命名空间信息的包和类。