シフト区切り記号を使用したawk一致と切り取りフィールド

シフト区切り記号を使用したawk一致と切り取りフィールド

サンプルブックマークファイル

ブックマーク ファイルに Chrome の一致パターンを使用するか、同様に使用したい場合は、一致に基づいてawkさまざまなフィールド区切り文字に基づいて特定のフィールドを切り取ります。

サンプル写真を添付し​​ました。ファイルとして追加する方法が見つかりませんでした。

H3フォルダ名(文字列が一致する場合)とURL(HREF文字列がある場合)が必要です。

次の2つのコマンドは対応する一致操作を完了します。

awk -F'[<>]' '/H3/{print $5}' bookmarks.htm
awk -F'"' '/HREF/{print $2}' bookmarks.html

私の目標は、上記の2つのステートメントを組み合わせて出力を次のようにすることです。

UNIX
url-1
url-2
OCE
url-3
url-4
url-5
ANDROID
url-6
url-7

「if」、「then」、「else」を試しましたが、awk役に立ちませんでした。

どうやってこれを達成できますか?それより良い候補がありますかawk? python、perlはすべて素晴らしいですが、そのタスクを実行するシェルスクリプトを書くのは簡単な作業なので、1行だけ考える必要はありません。

ベストアンサー1

これはHTMLファイルを処理する誤った方法です。sed/アッ/...特殊パーサーはほとんどありませんが、一時的な代替として使用されます。

sed '
    /\n/{P;d;}
    /<H3/s/[><]/\n/4g
    /HREF/s/"/\n/g
    D
    ' bookmarks.htm

GNU以外のバージョンの場合sed:

sed '
    /\n/{P;d;}     #if there is more then 1 line «P»rint 1st line then «d»elete all
    /<\/H3/s//\n/  #replace «</H3» by «\n»ewline
    /\n/s/">/\n/   #replace «">» by «\n»ewline if previous command is executed
    /HREF/s/"/\n/g #put «\n»ewline» around url if «HREF» in line
    D              #«D»elete 1 first line, go to start
    ' bookmarks.htm

おすすめ記事