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 seat
or
. Los corchetes son un rango de caracteres en una expresión regular.Respuestas:
Pruebe esto con GNU sed:
o
fuente
!d
particularmente ú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. Eld
comando 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
:-i
edita el archivo en el lugar,-n
evitased
imprimir 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
-E
grep interpreta expresiones regulares extendidas.Con
awk
:O puro
bash
:La
[[
expresión condicional interna es bashs. Comparamos$l
con la expresión regular y si tuvo éxito (&&
) imprimimos la línea conecho
.fuente
"$l"
. Y lo está poniendo como el primer argumento enecho
la línea de comandos, por lo que tendrá un problema si comienza con a-option
. (Usarprintf '%s\n' "$l"). Also, shell
read` 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
> file
En este caso, ahorrará algo de tiempo haciendo una copia de seguridad de su archivo antes de intentar algunos comandos.
fuente