Tengo un archivo html. Quiero eliminar todas las líneas que no comienzan con <tr>.
Lo intenté:
cat my_file | sed $'
s/^[^tr].*//
' | sed '/^$/d'
pero eliminó todas las líneas.
text-processing
sed
Michael Durrant
fuente
fuente

grep.s/^[^tr]...coincide con líneas que comienzan con cualquier carácter que no seator. Los corchetes son un rango de caracteres en una expresión regular.Respuestas:
Pruebe esto con GNU sed:
o
fuente
!dparticularmente útil porque le permite escribir otro comando sed dentro de la expresión, mientras que elpúnico imprime la coincidencia, pero el siguiente comando tiene la entrada sin modificar.La parte intermedia
/es una expresión regular. Eldcomando elimina líneas coincidentes.Actualización: ¡Uy, lo siento, vi que dijiste NO. Entonces
Donde
!niega el sentido del partido.fuente
Si tiene que ser
sed:-iedita el archivo en el lugar,-nevitasedimprimir todas las líneas, la expresión regular significa hacer coincidir todas las líneas que comienzan con (^)<tr>y esas líneas se imprimirán (p).Con
grep:Con
-Egrep interpreta expresiones regulares extendidas.Con
awk:O puro
bash:La
[[expresión condicional interna es bashs. Comparamos$lcon la expresión regular y si tuvo éxito (&&) imprimimos la línea conecho.fuente
"$l". Y lo está poniendo como el primer argumento enechola línea de comandos, por lo que tendrá un problema si comienza con a-option. (Usarprintf '%s\n' "$l"). Also, shellread` tiene que leer un byte por vez, por lo que es súper lento. Procesar archivos de texto en bash puro generalmente no es una buena opción a menos que sepa que su archivo es muy pequeño.La respuesta más fácil y sencilla sería:
Esto imprimirá el archivo con solo las líneas que comienzan con lo que podría ser bueno si no desea modificar el archivo directamente (como con sed).
Luego, si le gusta lo que ve en la salida, puede imprimirlo en un archivo con
> fileEn este caso, ahorrará algo de tiempo haciendo una copia de seguridad de su archivo antes de intentar algunos comandos.
fuente