Использование файла словаря с sed - PullRequest
2 голосов
/ 11 марта 2010

У меня есть файл blacklist.txt, содержащий ключевые слова, которые я хочу удалить с помощью sed.

Вот что содержит файл blacklist.txt

winston@linux ] $ cat blacklist.txt   
obscure
keywords
here
...

И вот что у меня есть, но в настоящее время не работает.

  blacklist=$(cat blacklist.txt);
  output="filtered_file.txt"

  for i in $blacklist;
    do
      cat $input | sed 's/$i//g' >> $output
    done

Ответы [ 2 ]

5 голосов
/ 11 марта 2010

, если вы хотите удалить строки, содержащие слова в этом черном списке

grep -v -f blacklist.txt inputfile > filtered_file.txt

если вы хотите удалить только слова

awk 'FNR==NR{
 blacklist[$0]
 next
}
{
 for(i=1;i<=NF;i++){
   if ($i in blacklist){
     $i=""
   }
 }
}1' blacklist inputfile > filtered_file.txt
3 голосов
/ 11 марта 2010

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

Сначала

$ sed -e 's@^@s/@' -e 's@$@//g' < blacklist.txt > script.sed

Если blacklist.txt выглядит как

word1
word2
....
wordN

тогда script.sed будет выглядеть

s/word1//g
s/word2//g
...
s/word3//g

Использование символов @, приведенных выше, может показаться немного запутанным. Обычный способ записи команды замены sed - s/old/new/. Это довольно неудобно, если либо old , либо new содержат косую черту. Таким образом, sed позволяет вам использовать любой символ, который вы хотите сразу после команды замены. Это означает, что вы можете написать s@foo/bar@plugh/plover@ вместо s/foo\/bar/plugh\/plover/. Я думаю, вы согласитесь, что первое легче читать на 1025 . 1027 *

Как только вы сгенерируете script.sed, запустите

$ sed -f script.sed < file > censored-file

Вы, конечно, можете использовать новомодную (т. Е. Менее 20 лет) опцию -i для редактирования на месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...