Remove todas as linhas que começam com um hash de uma lista

2

Para um exemplo simples, digamos que eu tenha um arquivo de lista com o seguinte conteúdo

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

Eu então tenho um arquivo 'padrão'. Com o conteúdo abaixo

cat 
dog

O que eu gostaria que acontecesse é que um novo arquivo é criado a partir do arquivo de lista, mas todas as linhas que começam com cat ou dog não foram copiadas.

Eu vi alguns exemplos de como isso funciona, por exemplo

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

De acordo com o que eu obtive, o sed não pode manipular um 'arquivo de entrada padrão'. Isso é um programa similar para sed que poderia alcançar o que eu gostaria de fazer? Se não, poderia fazer um programa no programa python que lê cada linha do arquivo 'padrão' e executar o comando sed no arquivo de lista, por exemplo. passes múltiplos com seds

    
por Dan1676 02.01.2014 / 13:32

2 respostas

1

Você pode usar o comando tell grep para ler seus padrões de um arquivo - com o comutador -v (invert) que deve fazer o que você quer

fgrep -vf patternfile listfile

De 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.)
    
por steeldriver 02.01.2014 / 14:22
0

Eu não tenho certeza se isso é o que você queria ou não. Eu fiz o que você queria, excluindo o cão & amp; cat vários padrões e salvou o modificado no novo arquivo. veja o código

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

abaixo aqui junto com o exemplo no terminal ( 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$ 
    
por rɑːdʒɑ 02.01.2014 / 14:03