Experimente com fgrep
ou, equivalentemente, grep -F
. Isso interpretará o padrão como uma string fixa.
Você também pode colocar essa única string em um arquivo (por si só) e usar grep -f filename
para especificar o arquivo. Você ainda precisará da bandeira -F
.
Veja man grep
para outras opções; existem vários que podem ser úteis.
Para várias formas de excluir uma linha que corresponde a um determinado padrão, consulte o link .
Juntando tudo, uma abordagem é:
- Coloque essa linha de texto em um arquivo por si só. Chame de "patternfile".
- Executar
grep -lrFf patternfile . > filelist
- Edite o
filelist
para remover a linha ./patternfile
- Executar
for i in $(cat filelist) ; do grep -vf patternfile $i > temp && chmod --reference=$i temp && mv temp $i ; done
Na etapa 2, as opções do grep são: -l
para listar os arquivos correspondentes; -r
para recursar em subdiretórios; -F
para usar uma string fixa como um padrão para corresponder; -f
para usar o arquivo patternfile
como o padrão a ser correspondido; então, é claro, > filelist
para criar um arquivo contendo a lista de arquivos correspondentes.
Na etapa 4, grep
simplesmente usa o sinal -v
para imprimir não linhas de correspondência e, em seguida, chmod
garante que você não terá problemas de permissões e mv
coloca o arquivo de volta no lugar.
Pode haver maneiras melhores, mas acho que isso será suficiente.
EDIT: Se você estiver executando isso como root , e nem todos esses arquivos pertencerem a root, faça a seguinte versão revisada da etapa 4:
for i in $(cat filelist) ; do grep -vf patternfile $i > temp && chown --reference=$i temp && chmod --reference=$i temp && mv temp $i ; done
O passo 4 original é bom se você for o proprietário de todos os arquivos.