Que ferramenta de linha de comando GNU / Linux que eu iria usar para realizar uma pesquisa e substituir em um arquivo?

StackOverflow https://stackoverflow.com/questions/155934

  •  03-07-2019
  •  | 
  •  

Pergunta

ferramenta de linha de comando que GNU / Linux que eu iria usar para realizar uma pesquisa e substituir em um arquivo?

Pode o texto de pesquisa e substituição, ser especificado em um formato regex?

Foi útil?

Solução

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

GNU sed (que você provavelmente tem) é ainda mais versátil:

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

Aqui está uma breve explicação dessas opções:

-i [SUFFIX], --in-lugar [= SUFFIX] editar arquivos no lugar (faz backup se de extensão fornecido)

-r, --regexp-extended usar expressões regulares estendidas no script.

O FreeBSD versão também suporta estas opções. A NetBSD e OpenBSD versões suportam apenas -r.

Se você quiser saber mais sobre o sed, Cori sugeriu este tutorial .

Outras dicas

Perl foi inventado para isso:

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

Qualquer s normais /// padrão nessas aspas simples. Você pode manter uma cópia de segurança com algo parecido com isto:

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

Ou gasoduto:

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

Mas isso é realmente mais do sed trabalho.

Considere Ruby como uma alternativa para Perl. Ele roubou a maioria dos argumentos de linha de comando de uma linha de Perl (-i, -p, -l, -e, -n) e auto-conjuntos $_ para você como Perl faz e tem muita bondade regex. Além disso sintaxe de Ruby pode ser mais confortável e mais fácil de ler e escrever do que Perl do ou do sed. (Ou não, dependendo do seu gosto).

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

vs.

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

Em muitos casos, quando se lida com one-liners, o desempenho não é o suficiente de um problema se importar se você usa leve sed ou pesado Perl ou heaveier de peso Ruby. Use o que é mais fácil de escrever.

sed , o editor de fluxo, e sim, ele usa regex.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top