Tente isso com o GNU sed:
sed -n '/^<tr>/p' file
ou
sed '/^<tr>/!d' file
Eu tenho um arquivo html. Desejo remover todas as linhas que não iniciam com <tr>
.
Eu tentei:
cat my_file | sed $'
s/^[^tr].*//
' | sed '/^$/d'
mas excluiu todas as linhas.
sed -e '/^<tr>/d'
A parte entre /
é uma regex. O comando d
exclui as linhas correspondentes.
Atualização: oops, desculpe, eu vi você disse NÃO. Então
sed -e '/^<tr>/!d'
Onde !
nega o sentido da correspondência.
Se tiver que ser sed
:
sed -ni '/^<tr>/p' file
-i
edita o arquivo no local, -n
evita sed
imprimir todas as linhas, a expressão regular significa corresponder a todas as linhas que iniciam ( ^
) com <tr>
e essas linhas serão impressas ( p
).
com grep
:
grep -E '^<tr>' file
Com -E
grep interpreta expressões regulares estendidas.
com awk
:
awk '/^<tr>/' file
Ou bash
:
while IFS= read -r l; do [[ "$l" =~ ^\<tr\> ]] && echo $l; done <file
A expressão condicional interna [[
é bashs. Comparamos $l
com a expressão regular e, se tivermos sucesso ( &&
), imprimimos a linha com echo
.
A resposta mais fácil e simples seria:
grep '^<tr>' path/to/file
Isto irá imprimir o arquivo com apenas as linhas que começam com o que poderia ser bom se você não quiser modificar o arquivo diretamente (como com o sed).
Então, se você gosta do que vê na saída, basta imprimir em um arquivo com > file
Nesse caso, você economiza tempo fazendo backup do arquivo antes de tentar alguns comandos.
Tags text-processing sed