Eu tenho um arquivo html. Quero remover todas as linhas que não começam <tr>
.
Eu tentei:
cat my_file | sed $'
s/^[^tr].*//
' | sed '/^$/d'
mas excluiu todas as linhas.
text-processing
sed
Michael Durrant
fonte
fonte
grep
.s/^[^tr]...
corresponde a linhas que começam com qualquer caractere que não sejat
our
. Os colchetes são um intervalo de caracteres em uma regex.Respostas:
Tente isso com o GNU sed:
ou
fonte
!d
particularmente útil porque permite que você escreva outro comando sed dentro da expressão, enquanto op
único imprime a correspondência, mas o comando seguinte tem a entrada não carregada.A parte entre
/
é uma regex. Od
comando exclui linhas correspondentes.Atualização: oops, desculpe, eu vi você dizer NÃO. assim
Onde
!
nega o sentido da partida.fonte
Se for necessário
sed
:-i
edita o arquivo no local,-n
evitased
a impressão de todas as linhas, a expressão regular significa corresponder a todas as linhas que começam com (^
)<tr>
e essas linhas serão impressas (p
).Com
grep
:Com
-E
grep interpreta expressões regulares estendidas.Com
awk
:Ou puro
bash
:A
[[
expressão condicional interna é bashs. Comparamos$l
com a expressão regular e, se for bem-sucedida (&&
), imprimimos a linha comecho
.fonte
"$l"
. E você está colocando isso como o primeiro argumento naecho
linha de comando, então você terá um problema se começar com a-option
. (Useprintf '%s\n' "$l"). Also, shell
read` tem que ler um byte-a-um-tempo, por isso é super lento arquivos de texto de processamento em festa pura geralmente não é uma boa escolha se você não sabe o seu arquivo é muito pequeno..A resposta mais fácil e simples seria:
Isso imprimirá o arquivo apenas com as linhas que começam com as que poderiam ser boas se você não quiser modificar o arquivo diretamente (como no sed).
Então, se você gosta do que vê na saída, pode imprimir em um arquivo com
> file
Nesse caso, você economiza um pouco de backup do arquivo antes de tentar alguns comandos.
fonte