Удалить все строки, которые начинаются с хеша из списка

Для простого примера, скажем, у меня есть файл списка, который имеет следующее содержимое

cat dog pig
dog hat
cat
clap sing
king
ca
cat hog
plate
plate
one two three
cat

У меня тогда есть файл 'pattern'. С приведенным ниже содержанием

cat 
dog

Я хотел бы, чтобы из файла списка был создан новый файл, но все строки, начинающиеся с cat или dog, я не скопировал.

Я видел несколько примеров, как это может работать, например,

.
sed '/pattern to match/d' ./infile > ./newfile

Из того, что я собрал, sed не может обработать «файл ввода шаблона». Это программа, похожая на sed, которая может достичь того, что я хотел бы сделать? Если нет, то можно создать программу на языке Python, которая считывает каждую строку из файла 'pattern' и запускает команду sed для файла списка, например, несколько проходов с сидами

2
задан 25 January 2014 в 17:43

2 ответа

Вы можете использовать Tell grep, чтобы прочитать его шаблоны из файла - с ключом -v (инвертировать), который должен делать то, что вы хотите

fgrep -vf patternfile listfile

Из man grep

   -f FILE, --file=FILE
          Obtain  patterns  from  FILE,  one  per  line.   The  empty file
          contains zero patterns, and therefore matches nothing.   (-f  is
          specified by POSIX.)
0
ответ дан 25 January 2014 в 17:43

Я не уверен, хотел ли ты этого или нет. Я сделал это, что вы хотели, удалив собаку & amp; кошка несколько шаблонов и сохраненные изменения в новом файле. см. код

 sed '/cat/d; /dog/d' file1.txt > file2.txt

ниже вместе с примером в терминале ( CTRL + ALT + T )

raja@debian:~/sand$ cat file1.txt
cat dog pig
dog hat
cat
clap sing
king
ca
cat hog
plate
plate
one two three
cat
raja@debian:~/sand$ sed '/cat/d; /dog/d' file1.txt > file2.txt
raja@debian:~/sand$ cat file2.txt
clap sing
king
ca
plate
plate
one two three
raja@debian:~/sand$ 
0
ответ дан 25 January 2014 в 17:43

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

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