13

これは、Web サイトの標準 Web ページで使用しているコマンドですwget

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

ただし、改行が表示されますが、左のブレークインは追加されません。例えば

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

戻り値

 (blank line which is fine)
 hello>
 world>

それ以外の

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

どうしたの?

4

4 に答える 4

28

これtrは、文字の置換 (または削除) のみを行うためです。

sed代わりに試してください。

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

またはawk

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

またはperl

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

またはruby

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

またはpython

echo '<hello><world>' \
| python -c 'for l in __import__("fileinput").input():print l.replace("<","\n<")'
于 2011-12-01T23:23:46.877 に答える
3

GNU をお持ちの場合grep、これでうまくいくかもしれません:

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

これはすべての HTML を通過する必要がありますが、各タグは行の先頭から開始し、タグ以外のテキストが同じ行に続く必要があります。

タグだけが必要な場合:

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

ただし、 HTML を正規表現で解析するのは得策ではないことを知っておく必要があります。

于 2011-12-04T06:30:31.253 に答える
2

これはあなたのために働きますか?

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

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

awk {}アクションの前に正規表現//(これを実行したい行)を配置できます。

于 2011-12-01T23:38:56.550 に答える