Co se GNU / Linux nástroj příkazového řádku, tak bych použít k provádění vyhledávání a nahrazování v souboru?

hlasů
20

Co se GNU / Linux nástroj příkazového řádku, tak bych použít k provádění vyhledávání a nahrazování v souboru?

Může hledaný text a výměna být uvedeno ve formátu regex?

Položena 01/10/2008 v 03:02
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
46

sed 's/a.*b/xyz/g;' old_file > new_file

GNU sed (což pravděpodobně máte) je ještě univerzálnější:

sed -r --in-place 's/a(.*)b/x\1y/g;' your_file

Zde je stručné vysvětlení těchto možností:

-i [SUFFIX], --in-místo [= PŘÍPONA] upravit soubory v místě (je-li zálohu rozšíření dodávky)

-r, --regexp s prodlouženým využití rozšířeno regulární výrazy ve skriptu.

FreeBSD verze také podporuje tyto možnosti. The NetBSD a OpenBSD verze podporují pouze -r.

Chcete-li se dozvědět více o sed, Cori navrhl tento výukový program .

Odpovězeno 01/10/2008 v 03:08
zdroj uživatelem

hlasů
27

Perl byl vynalezen pro toto:

perl -pi -e 's/foo/bar/g;' *.txt

Každý normální s /// vzor v těchto jednoduchých uvozovkách. Můžete mít zálohu něco takového:

perl -pi.bak -e 's/foo/bar/g;' *.txt

Nebo potrubí:

cat file.txt | perl -ne 's/foo/bar/g;' | less

Ale to je spíš sed úkolem.

Odpovězeno 01/10/2008 v 03:04
zdroj uživatelem

hlasů
6

Zvážit Ruby jako alternativu k Perl. To ukradl většinu jednořádkový příkazové args Perl ( -i, -p, -l, -e, -n) a auto sad $_pro vás jako Perl dělá a má spoustu regex dobra. Navíc syntaxe Ruby může být pohodlnější a snazší číst nebo psát, než Perl nebo SED. (Nebo ne, záleží na vašem vkusu).

ruby -pi.bak -e '$_.gsub!(/foo|bar/){|x| x.upcase}' *.txt

vs.

perl -pi.bak -e 's/(foo|bar)/\U\1/g' *.txt

V mnoha případech, pokud se jedná o jedno-vložky, výkon není dost problém, aby jedno, jestli používáte lehký sed nebo heavyweight Perl nebo heaveier hmotností Ruby. Použijte vše, co je nejjednodušší psát.

Odpovězeno 01/10/2008 v 20:41
zdroj uživatelem

hlasů
5

sed , proud editor, a ano, používá regulární výraz.

Odpovězeno 01/10/2008 v 03:04
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more