
Olá, tenho um arquivo que possui muitas linhas que terminam com main.css">
, e algumas delas são repetidas.
Quero manter apenas uma cópia dessas linhas e excluir a linha repetida.
Posso usar o grep para pesquisar se um arquivo tem uma linha que termina 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
Responder1
Você deveria usar:
grep -n 'main\.css">$' file.txt
$
denota o fim da linha, obviamente, nada pode seguir depois disso.
Você não precisa do *
aqui, pois você está procurando o padrão dentro da linha, tudo que está na frente é automaticamente negligenciado se o seu padrão for encontrado. A única coisa que você precisa escapar aqui é .
qual é o único operador de expressão regular em main.css">
. Também -r
é redundante quando você fornece apenas um arquivo.
Responder2
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
Responder3
Acho que você também queria manter outras linhas que não existem, main.css>
mesmo que sejam duplicadas:
Line 1
Line 2
Line 1
Line 2 main.css">
Line 2 main.css">
Line 3
Line 3 main.css">
Line 4
Para que após o comando você obtenha:
Line 1
Line 1
Line 2
Line 2 main.csv>
Line 3
Line 3 main.csv>
Line 4
Neste caso, o comando abaixo deve resolver o problema:
sort your_file | awk '!/main.css">$/;/main.css">$/,/main.css">$/{if($0!=p){print;p=$0}}'
Responder4
sed '/main.css/d' file.txt > ~/Desktop/solution.txt
Funcionou perfeitamente bem :)