Да, есть множество способов сделать это. Вы можете использовать awk
,perl
или bash
сделать эти мероприятия , а также. Хотя в целом sed
это, пожалуй, самый подходящий инструмент для выполнения таких задач.
Примеры
Скажем, у меня есть этот пример данных в файле data.txt
:
foo bar 12,300.50
foo bar 2,300.50
abc xyz 1,22,300.50
AWK
$ awk '{gsub("foo", "foofoofoo", $0); print}' data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
Perl
$ perl -pe "s/foo/foofoofoo/g" data.txt
foofoofoo bar 12,300.50
foofoofoo bar 2,300.50
abc xyz 1,22,300.50
Встроенное редактирование
Приведенные выше примеры также могут напрямую изменять файлы. Пример Perl тривиален. Просто добавьте -i
переключатель.
$ perl -pie "s/foo/foofoofoo/g" data.txt
Поскольку awk
это немного менее прямое, но столь же эффективное:
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
Этот метод создает вложенную оболочку с фигурными скобками '{...} `, куда файл перенаправляется в него через это:
$ { ... } < data.txt
Как только файл был перенаправлен в вложенную оболочку, он удаляется и затем awk
запускается для содержимого файла, который был прочитан в вложенные оболочки STDIN. Затем этот контент обрабатывается awk
и записывается обратно в то же имя файла, которое мы только что удалили, эффективно заменяя его.
$var=~s/a/b/g
,gsub(/a/,"b",var)
,var.gsub(/a/,'b')
,var.replace(/a/g,'b')
,preg_replace("/a/","b",$var)
,regsub -all a b $var
. Кроме того, многие инструменты и языки могут также выполнять замену строк в виде простого текста. Так что ваш вопрос как-то широк.