unix sed awk tr

unix tr buscar y reemplazar



sed awk (4)

¿Esto funciona para tí?

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

Puedes poner una expresión regular / / (líneas para las que quieres que esto suceda) frente a la acción awk {} .

Este es el comando que estoy usando en una página web estándar de la que me gustaría comprar en línea.

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

sin embargo, me dio nuevas líneas, pero no agregó la zanahoria trasera nuevamente. p.ej

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

devoluciones

(blank line which is fine) hello> world>

en lugar de

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

Gracias


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

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

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


Eso es porque tr solo hace la sustitución (o eliminación) de carácter por carácter.

Pruebe sed 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<")''


Si tiene GNU grep , esto puede funcionar para usted:

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

que debería pasar a través de todo el HTML, pero cada etiqueta debería comenzar al principio de la línea con un posible texto sin etiqueta siguiendo en la misma línea.

Si no quieres nada más que etiquetas:

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

Sin embargo, debe saber que no es una buena idea analizar HTML con expresiones regulares.