Como localizar e substituir o conteúdo de múltiplos arquivos no diretório atual usando o shell script ou linux?

0

Eu tenho o nome da pasta atual como details1 e a pasta atual tem uma lista de arquivos como file1 , file2 , file3 e assim por diante ...

Exemplo: (Aqui eu mostrei apenas o file1 e outros arquivos também conterão o mesmo conteúdo que file1 .)

file1:cat file1

 href="/de_hecklist/secry/GD/GD10/"

 href="/de_hecklist/secry/GT/GT1/"

Minha consulta:

Como usar localizar e substituir vários arquivos (por exemplo,file1, file2 e file3 e assim por diante) no diretório atual com uma substituição de horário sem abrir o arquivo.

Eu tentei o seguinte: (Isso é aplicado abrindo cada arquivo)

:%s/de_hecklist/data/g

:%s/secry/send/g

A saída com exceção deve ser a seguinte para vários arquivos no diretório atual:

href="/data/send/GD/GD10/"

href="/data/send/GT/GT1/"
    
por example file 10.01.2017 / 12:43

2 respostas

1

Se esta linha der a saída correta

 sed -e 's/de_hecklist/data/g' -e 's/secry/send/g' file1

você pode alterar o conteúdo in-place com -i

 sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' file1

Para fazer isso com todos os arquivos que correspondem a file? , você pode

find . -name 'file?' -type f -exec sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' {} \;

Você também pode atribuir sed a todos os arquivos como parâmetros. Punho faz um comando que dá todos os nomes de arquivos completos:

find . -name 'file?' -type f

Em seguida, adicione isso a sed :

sed -i -e 's/de_hecklist/data/g' -e 's/secry/send/g' $(find . -name 'file?' -type f) 
    
por 10.01.2017 / 12:54
1

Tente isto:

find -maxdepth 1 -type f -name "file?" -exec sed -i.bak -e 's/de_hecklist/data/g; s/secry/send/g' {} +

Você pode substituir -name "file?" pelo padrão correspondente aos seus arquivos ou removê-lo totalmente para editar todos os arquivos.

O -maxdepth 1 instrui find a não inserir subdiretórios, de forma que apenas os arquivos correspondentes a file? no diretório atual sejam alterados.

A opção -i.bak em sed faz um backup dos arquivos. Você pode removê-lo se não precisar de um backup. Observe também que essa opção -i ( --in-place ) é uma extensão GNU sed e, portanto, não é compatível com POSIX, mas como você usa o Linux, isso não será um problema.

    
por 10.01.2017 / 12:51