pesquisando sobre uma palavra específica em um diretório e excluindo-a

0

Eu procuro em um diretório por uma determinada palavra em arquivos de texto por esta instrução de script de shell

 grep -r "$2" "$1"
  • $2 é o diretório
  • $1 é a palavra

Como posso excluir essa palavra depois dela?

    
por Mousa Ladkani 01.03.2016 / 22:51

2 respostas

1

Você pode usar gawk para fazer isso:

gawk -i inplace '{gsub("test", "");print}' file.txt

Aqui "test" é a palavra que você está tentando excluir e file.txt é o arquivo que você está tentando editar. Você já encontra isso usando o grep, portanto, não estou incluindo essa parte.

Estou editando isso por sugestão do @Serg

echo -n "Enter the path to directory (/path/to/dir), followed by [enter]:"
read dir_path

echo -n "Enter the word you are looking for, followed by [enter]:"
read word

cd ${dir_path}

for file in "$dir_path"/*txt; do
    echo $file

    awk -v var=$word -i inplace '{gsub(var, "");print}' $file
done
    
por Jay T. 01.03.2016 / 23:07
0

grep é a linha ferramenta de correspondência . Apenas encontra linhas que tenham uma palavra e não se destinem à edição / processamento de texto.

sed , no entanto, é a ferramenta certa para isso. Normalmente, você usaria a substituição para excluir uma palavra assim:

sed 's/word//g' text.txt

Para vários arquivos no mesmo diretório, é possível usar o curinga:

sed  's/word//g' *

O sinalizador -i inplace é necessário para fazer alterações em um arquivo.

Aqui está um exemplo de trabalho:

$> echo "HELLO WORLD" | tee {one,two,three}.txt                                
HELLO WORLD
$> sed -i 's/WORLD//g' *                                                       
$> cat one.txt
HELLO 
$> cat two.txt                                                                 
HELLO 
$> 

Pequena desvantagem desta abordagem é que você está executando a operação em todos os arquivos que estão sendo pesquisados. Como cuidamos de apenas um arquivo exato? Bem, podemos usar grep para nos informar o nome do arquivo que tem a opção word with -l e depois passá-lo para sed usando xargs .

Aqui está um exemplo de trabalho.

$> echo "HELLO BEAUTIFUL WORLD" > one.txt                                      
$> grep -l 'BEAUTIFUL'  *  
one.txt
$> grep -l 'BEAUTIFUL'  * | xargs sed -i 's/WORLD//g'                          
$> cat one.txt
HELLO BEAUTIFUL 
$> 
    
por Sergiy Kolodyazhnyy 02.03.2016 / 01:23