これは、Webサイトからwget
する標準のWebページで使用しているコマンドです。
tr '<' '\n<' < index.html
しかし、それは私に改行を与えますが、左のブロケードを再び追加することはありません。例えば.
echo "<hello><world>" | tr '<' '\n<'
戻り値
(blank line which is fine)
hello>
world>
の代わりに
(blank line or not)
<hello>
<world>
どうしましたか?
これは、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<")'
GNU grep
がある場合、これはあなたのために働くかもしれません:
grep -Po '<.*?>[^<]*' index.html
これはすべてのHTMLを通過する必要がありますが、各タグは行の先頭から始まり、同じ行の後にタグ以外のテキストが続く可能性があります。
タグだけが必要な場合:
grep -Po '<.*?>' index.html
ただし、正規表現を使用してHTMLを解析するのは お勧めできません であることを知っておく必要があります。
これはあなたのために働きますか?
awk -F"><" -v OFS=">\n<" '{print $1,$2}'
[jaypal:~/Temp] echo "<hello><world>" | awk -F"><" -v OFS=">\n<" '{$1=$1}1';
<hello>
<world>
awk
{}
アクションの前に正規表現//(これを実行したい行)を配置できます。
改行を置く順序は重要です。また、「<」をエスケープすることもできます。
tr '\/<' '\/<\n' < index.html
`tr '<' '<\n' < index.html` works as well.