2012-10-04 77 views
9

que tiene un archivo con las líneas que contienen:Quitar/reemplazar las etiquetas HTML en bash

<li><b> Some Text:</b> More Text </li> 

Quiero quitar las etiquetas HTML y vuelva a colocar la etiqueta </b> con un poco lo que se convierte de esta manera:

Algo de texto: - Más texto

Estoy tratando de usar sed, pero no puedo encontrar la combinación correcta de expresiones regulares.

Respuesta

14

Si estrictamente quiere despojar a todas las etiquetas HTML, pero al mismo tiempo única sustituir la etiqueta </b> con un -, se pueden encadenar dos simples sed comandos con un tubo:

cat your_file | sed 's|</b>|-|g' | sed 's|<[^>]*>||g' > stripped_file 

Esta voluntad pase todos los contenidos del archivo al primer comando sed que controlará la sustitución del </b> por un -. Luego, la salida de eso se canalizará a un sed que reemplazará todas las etiquetas HTML con cadenas vacías. El resultado final se guardará en el nuevo archivo stripped_file.

Utilizando un método similar al de la otra respuesta de @Steve, también puede usar la opción sed-e para encadenar expresiones en un solo comando (sin derivación); añadiendo -i, también se puede leer en y reemplazar el contenido de su archivo original sin necesidad de cat, o un nuevo archivo:

sed -i -e 's|</b>|-|g' -e 's|<[^>]*>||g' your_file 

Esto va a hacer la sustitución igual que el mando encadenado anteriormente, sin embargo esta vez reemplazará directamente el contenido en el archivo de entrada. Para guardar en un nuevo archivo, elimine el -i y agregue > stripped_file hasta el final (o el nombre de archivo que elija).

+0

Esto ayudó a corregir algunos archivos xml con la variable '=' texto tipo "x" . Usado 's/'variable ="' [^ \ "] * \" // 'para hacer coincidir el nombre de la etiqueta y todo entre las siguientes dos comillas dobles. (Ignore la combinación funky de comillas simples y escapadas) – cde

+0

Recomendar' cat | Sed | sed' y luego mencionar de paso que, de hecho, todo lo que necesitas es 'sed', parece estar mal dirigido." También podrías "simplemente no recomendar el enfoque defectuoso. – tripleee

0

Una forma usando GNU sed:

sed -e 's/<\/b>/-/g' -e 's/<[^>]*>//g' file.txt 

Ejemplo:

echo "<li><b> Some Text:</b> More Text </li>" | sed -e 's/<\/b>/-/g' -e 's/<[^>]*>//g' 

Resultado:

Some Text:- More Text 
Cuestiones relacionadas