2011-12-01 44 views
5

Este es el comando que estoy usando en una página web estándar que tengo en línea.unix tr buscar y reemplazar

tr '<' '\n<' < index.html 

sin embargo, me da nuevas líneas, pero no agrega la zanahoria trasera de nuevo. p.

echo "<hello><world>" | tr '<' '\n<' 

vuelve

(blank line which is fine) 
hello> 
world> 

en lugar de

(blank line or not) 
<hello> 
<world> 

Gracias

Respuesta

12

Eso es porque sólo hace tr carácter fines de carácter de sustitución (o eliminación).

Pruebe sed en su lugar.

echo '<hello><world>' | sed -e 's/</\n&/g' 

O awk.

echo '<hello><world>' | awk '{gsub(/</,"\n<",$0)}1' 

O perl.

echo '<hello><world>' | perl -pe 's/</\n</g' 

O ruby.

echo '<hello><world>' | ruby -pe '$_.gsub!(/</,"\n<")' 

O python.

echo '<hello><world>' \ 
| python -c 'for l in __import__("fileinput").input():print l.replace("<","\n<")' 
+0

he intentado pero me da n n .No sé cuál es el carácter de sed newline – Kamran224

+0

@ Kamran224 Esto funciona para mí, pero intente: echo -e ' ' | sed -e 's/

+0

@ Kamran224 '\ n' es una extensión de GNU sed. ¿En qué sistema estás? – ephemient

1

¿Esto funciona para usted?

awk -F"><" -v OFS=">\n<" '{print $1,$2}' 

[jaypal:~/Temp] echo "<hello><world>" | awk -F"><" -v OFS=">\n<" '{$1=$1}1'; 
<hello> 
<world> 

Se puede poner una expresión regular// (líneas que desea que esto suceda por) delante de la acción awk{}.

+1

''{$ 1 = $ 1} 1'' es más corto y funcionará si hay más de'><'en una línea. – ephemient

+0

Gracias @ephemient Acepto, he actualizado mi respuesta. –

+0

Esto reemplazaría a menos caracteres '<' que en la pregunta. –

1

Si tiene GNU grep, esto puede funcionar para usted:

grep -Po '<.*?>[^<]*' index.html 

que debe pasar a través de todo el HTML, pero cada etiqueta debe comenzar por el principio de la línea con un posible texto no etiqueta siguiente en la misma linea

Si desea nada más que etiquetas:

grep -Po '<.*?>' index.html 

Usted debe saber, sin embargo, que es not a good idea a analizar HTML con expresiones regulares.

1

El orden de donde coloca su nueva línea es importante. También puedes escapar al "<".

tr '\/<' '\/<\n' < index.html

`tr '<' '<\n' < index.html` works as well.