Можно ли найти / заменить некоторые символы в файле, используя некоторые команды bash? - PullRequest
1 голос
/ 28 декабря 2011

Я хотел бы найти, содержит ли этот файл /path/to/file/profile.yaml следующие значения:

    Cpanel::Easy::PHP5::Curl: 0
    Cpanel::Easy::PHP5::CurlSSL: 0

и если да, заменить нули на 1 следующим образом:

    Cpanel::Easy::PHP5::Curl: 1
    Cpanel::Easy::PHP5::CurlSSL: 1

и все это в команде bash!

Как я могу это сделать?

Ответы [ 5 ]

5 голосов
/ 28 декабря 2011

С 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
2 голосов
/ 28 декабря 2011

Чтобы изменить обе строки за один раз (и перенаправить в другой файл), вы также можете использовать perl:

perl -pe 's/Cpanel::Easy::PHP5::Curl(SSL)*: 0/Cpanel::Easy::PHP5::Curl$1: 1/' file1 > file2
2 голосов
/ 28 декабря 2011

Это должно работать -

sed -r 's/(Cpanel::Easy::PHP5::Curl(SSL)?:) 0/\1 1/' yourfile

Вы можете либо re-direct выводить в другой файл, либо сделать -i для подстановки в файл.

1 голос
/ 28 декабря 2011

Если это YAML, используйте для этого подходящий модуль YAML.Такие языки, как Python (и я уверен, что многие другие) имеют модули YAML.Вы, вероятно, уже установили Python;вам нужно будет добавить пакет YAML, например http://pyyaml.org/.

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.Возможно, вам потребуется определить некоторые пакеты и классы, которые отражают информацию о пространстве имен.

1 голос
/ 28 декабря 2011

Предполагается, что под «командой bash» подразумевается команда, которую вы можете выполнить из командной строки bash;если так, то вы можете использовать sed, чтобы делать то, что вы хотите.

...