поиск об определенном слове в Каталоге затем удаляет его

Я ищу в каталоге пообещанный в текстовых файлах этой инструкцией по сценарию оболочки

 grep -r "$2" "$1"
  • $2 каталог
  • $1 слово

Как я могу удалить это слово после него?

0
задан 2 March 2016 в 00:53

2 ответа

Можно использовать gawk, чтобы сделать это:

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

Здесь "тест" является словом, которое Вы пытаетесь удалить, и file.txt является файлом, который Вы пытаетесь отредактировать. Вы уже находите это использование grep следовательно, я не включаю ту часть.

я редактирую это на предложении @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
1
ответ дан 29 September 2019 в 11:08

grep инструмент соответствия строки. Это только находит строки, которые перебрасываются парой слов, и не предназначается для редактирования текста / обработка.

sed однако, правильный инструмент для этого. Обычно Вы использовали бы замену для удаления слова, как так:

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

Для нескольких файлов в том же каталоге можно использовать подстановочный знак:

sed  's/word//g' *

-i оперативный флаг необходим для фактического внесения изменений в файл.

Вот рабочий пример:

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

Маленький недостаток этого подхода - то, что Вы выполняете операцию на всех искавших файлах. Как мы заботимся о всего одном точном файле? Ну, мы можем использовать grep сказать нам имя файла, которое имеет word с -l опция, и затем передает его на sed использование xargs.

Вот рабочий пример.

$> 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 
$> 
0
ответ дан 29 September 2019 в 11:08

Другие вопросы по тегам:

Похожие вопросы: