8

Найти и заменить текст в файле через командную строку Bash

3

Какой самый простой способ выполнить замену строки в файле, например, заменить строку abc на XYZ в файле /tmp/file.txt?

Я разрабатываю приложение и использую IronPython для выполнения команд через SSH, но не очень хорошо знаком с Unix и не знаю, что именно искать.

Я слышал, что Bash, помимо того что является интерфейсом командной строки, может быть очень мощным языком сценариев. Если это правда, я предполагаю, что можно выполнять такие действия.

Могу ли я сделать это с помощью Bash, и какой самый простой (в одну строку) скрипт поможет мне достичь своей цели?

5 ответ(ов)

1

Манипуляция с файлами обычно не осуществляется непосредственно Bash, а выполняется с помощью программ, вызываемых из Bash. Например:

perl -pi -e 's/abc/XYZ/g' /tmp/file.txt

Флаг -i указывает на то, что замена должна происходить непосредственно в файле.

Более детальную информацию можно найти в man perlrun, в том числе способы создания резервной копии оригинального файла.

0

Это старая тема, но для тех, кто хочет использовать переменные: как сказал @centurian, одинарные кавычки означают, что ничего не будет интерпретироваться.

Простой способ включить переменные в команду — это использовать конкатенацию строк. В bash это делается через совместное использование, поэтому следующий пример должен сработать:

sed -i -e "s/$var1/$var2/g" /tmp/file.txt
0

Я был удивлён, когда наткнулся на это...

Существует команда replace, которая поставляется вместе с пакетом "mysql-server". Поэтому, если вы его установили, попробуйте использовать её:

# заменяем строку abc на XYZ в файлах
replace "abc" "XYZ" -- file.txt file2.txt file3.txt

# или передаем echo в replace
echo "abcdef" | replace "abc" "XYZ"

Дополнительные сведения можно найти в man replace.

0

Bash, как и другие оболочки, является инструментом для координации выполнения команд. Обычно вы стараетесь использовать стандартные команды UNIX, но, конечно, можете использовать Bash для вызова чего угодно, включая ваши собственные скомпилированные программы, другие скрипты оболочки, скрипты на Python и Perl и т.д.

В данном случае есть несколько способов сделать это.

Если вы хотите прочитать файл и записать его в другой файл с заменой по мере обработки, используйте sed:

sed 's/abc/XYZ/g' <infile >outfile

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

echo "%s/abc/XYZ/g
w
q
" | ex file

Этот пример похож на vi, но без полноэкранного режима. Вы можете использовать те же команды, что и на : подсказке в vi.

0

Вы можете использовать sed для замены текста:

sed -i 's/abc/XYZ/gi' /tmp/file.txt

Если вы не знаете имя файла, можно использовать find вместе с sed:

find ./ -type f -exec sed -i 's/abc/XYZ/gi' {} \;

Для поиска и замены во всех файлах Python можно выполнить следующую команду:

find ./ -iname "*.py" -type f -exec sed -i 's/abc/XYZ/gi' {} \;
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь