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

RTTI не существует для C ++.

Это просто неправильно. Фактически, сам термин RTTI был придуман стандартом C ++. С другой стороны, RTTI не очень далеко продвигает отражение.

494
задан Ash 22 July 2017 в 02:04
поделиться

4 ответа

Самый легкий путь состоит в том, чтобы использовать sed (или жемчуг):

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

, Который вызовет sed, чтобы сделать оперативное редактирование из-за -i опция. Это можно назвать от удара.

, Если Вы действительно действительно хотите использовать просто удар, затем следующее может работать:

while read a; do
    echo ${a//abc/XYZ}
done < /tmp/file.txt > /tmp/file.txt.t
mv /tmp/file.txt{.t,}

Это циклично выполняется по каждой строке, делая замену, и пишущий во временный файл (не хотите ударять вход). Перемещение в конце просто перемещается временный в настоящее имя.

855
ответ дан John Kugelman 22 July 2017 в 12:04
поделиться
  • 1
    Вероятно, лучше всего не принять решения на основе статей Wikipedia. попробуйте Modenizr вместо этого modernizr.com – cofiem 1 October 2010 в 17:45

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

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

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

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

, Если Вы хотите отредактировать файл на месте (как будто открытие файла в редакторе, редактируя его, затем сохраняя его) инструкции по предоставлению к строчному редактору 'исключая'

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

Исключая похож на vi без полноэкранного режима. Можно дать ему те же команды, Вы были бы в vi's ':' подсказка.

38
ответ дан slim 22 July 2017 в 12:04
поделиться

Управление файлом обычно не делается Bash, но программами, вызванными Bash, например:

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

Эти -i флаг говорит этому делать оперативную замену.

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

157
ответ дан John Kugelman 22 July 2017 в 12:04
поделиться
  • 1
    Tvanfosson' s решение совпадает с моим № 1 - индекс объявляется на уровне дб, не на уровне Ruby или направляющих. Направляющие только будут в состоянии сообщить о " SQL error" когда дубликат отправлен. That' s, почему Вы хотите также проверить в модели (на уровне направляющих). – Larry K 19 May 2009 в 16:27

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

# delete all lines matching foobar 
ed -s test.txt <<< $'g/foobar/d\nw' 

Подробнее см. сайт bash-hackers

12
ответ дан 22 November 2019 в 22:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: