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

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

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
задан 07.05.2020, 02:15

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.)
1
ответ дан 07.05.2020, 02:16
  • 1
    Точно, Что я хотел Аплодисменты – RiddlerDev 07.05.2020, 02:17

Я не уверен, хотел ли ты этого или нет. Я сделал это, что вы хотели, удалив собаку & 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
ответ дан 07.05.2020, 02:17
  • 1
    Я знал об этом методе. Если из, немного более ясных в вопросе. Файлы, против которых я собираюсь выполнить это, содержат тысячи шаблонов таким образом, невозможно записать каждому человеку каждый шаблон. Поэтому я должен использовать ' шаблон ввел file' – ChrisG 07.05.2020, 02:17

Теги

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