Tak, istnieje wiele sposobów na zrobienie tego. Możesz również użyć awk
, perl
lub, bash
aby wykonać te czynności. Zasadniczo sed
jest to jednak prawdopodobnie najbardziej odpowiednie narzędzie do wykonywania tego typu zadań.
Przykłady
Powiedzmy, że mam te przykładowe dane w pliku 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
Edycja bezpośrednia
Powyższe przykłady mogą również bezpośrednio modyfikować pliki. Przykład Perla jest trywialny. Po prostu dodaj -i
przełącznik.
$ perl -pie "s/foo/foofoofoo/g" data.txt
Dla awk
niego jest trochę mniej bezpośredni, ale równie skuteczne:
$ { rm data.txt && awk '{gsub("foo", "foofoofoo", $0); print}' > data.txt; } < data.txt
Ta metoda tworzy podpowłokę z nawiasami klamrowymi {...}, w których plik jest przekierowywany do niego przez to:
$ { ... } < data.txt
Po przekierowaniu pliku do podpowłoki jest on usuwany, a następnie awk
uruchamiany względem zawartości pliku, który został odczytany do podpowłoki STDIN. Ta treść jest następnie przetwarzana awk
i zapisywana z powrotem do tej samej nazwy pliku, którą właśnie usunęliśmy, skutecznie ją zastępując.
$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
. Poza tym wiele narzędzi i języków może również zastępować ciągi tekstowe. Więc twoje pytanie jest jakoś szerokie.