grep para ver se uma linha termina com uma string específica

0

Olá, tenho um arquivo com muitas linhas que terminam com main.css"> e algumas delas são repetidas.

Eu quero manter apenas uma cópia dessas linhas e excluir a linha repetida.

Posso usar o grep para pesquisar se um arquivo tiver uma linha que termine com main.css"> ?

Até agora eu tenho:

 grep ' main.css' file.txt |sort | uniq -u

Isso não faz nada como eu esperava, apenas me dá uma saída em branco. Por favor ajude?  Isso não fez

    
por gkmohit 13.06.2014 / 15:39

4 respostas

4

Você deve usar:

grep -n 'main\.css">$' file.txt

$ denota o fim da linha, obviamente, nada pode seguir depois disso.

Você não precisa do * aqui, enquanto procura o padrão dentro da linha, tudo na frente é automaticamente negligenciado se o padrão for encontrado. A única coisa que você precisa escapar aqui é . , que é o único operador de expressão regular em main.css"> . Também -r é redundante quando você fornece apenas um arquivo.

    
por 13.06.2014 / 15:44
1

Você também pode usar o awk,

$ cat file
foo main.css">
ghj
brar main.css">

$ awk '/main\.css">$/{print NR}' file
1
3

Ou sed :

$ sed '/main\.css">$/=' file
1
3
    
por 13.06.2014 / 16:16
1

Acho que você também queria manter outras linhas que não têm main.css> , mesmo que sejam duplicatas:

Line 1
Line 2
Line 1
Line 2 main.css">
Line 2 main.css">
Line 3 
Line 3 main.css">
Line 4

Para que depois do comando você receba:

Line 1
Line 1
Line 2
Line 2 main.csv>
Line 3 
Line 3 main.csv>
Line 4

Neste caso, o comando abaixo deve fazer o truque:      sort your_file | awk '!/main.css">$/;/main.css">$/,/main.css">$/{if($0!=p){print;p=$0}}'

    
por 13.06.2014 / 16:50
-2
sed  '/main.css/d' file.txt  > ~/Desktop/solution.txt

Isso funcionou perfeitamente bem:)

    
por 13.06.2014 / 16:01