Так, існує безліч способів зробити це. Ви можете використовувати 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
Вбудоване редагування
Наведені вище приклади також можуть безпосередньо змінювати файли. Приклад Перла - тривіальний. Просто додайте -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. Окрім цього, багато інструментів та мов також можуть замінити звичайний текстовий рядок. Тож ваше запитання якось широке.