やりたいこと
一文字の区切り文字を複数指定したい。
例えば「< または >」という区切り文字で文字列を分割する等。
やり方
例えば<>を区切り文字、つまり「<」と「>」それぞれを区切り文字として認識して欲しい場合は、awk -F'[<>]' と記載した上で区切った項目のN番目を出力する際にはprint $Nと記載します
例えば、冒頭の例であれば以下。
$ echo "<root><x><0><0></root></bin/bash>" | awk -F'[<>]' '{print $2}' root
また、複数指定であれば
$ echo "<root><x><0><0></root></bin/bash>" | awk -F'[<>]' '{print $2,$4}' root x
区切り文字がデフォルトではスペースなので変更したい場合は
$ echo "<root><x><0><0></root></bin/bash>" | awk -F'[<>]' 'BEGIN{OFS="#"}{print $2,$4}' root#x
と記載します。
以下、補足です。
補足
一行の中で区切り文字で表現されているテキストから
特定の値を取り出すコマンドとしてcutコマンドがあります。
例えば、コロン「:」の区切り文字で5つ目を取り出したければ以下のように入力すれば取得できます。
$ echo "root:x:0:0:/root:/bin/bash" | cut -d':' -f5 /root
複数の項目を取り出すことも可能ですし、
$ echo "root:x:0:0:/root:/bin/bash" | cut -d':' -f1,2,5,7 root:x:/root:/bin/bash
複数項目を取り出す際の出力の区切り文字も --output-delimiterで変更可能です。
$ echo "root:x:0:0:/root:/bin/bash" | cut -d':' -f1,2,5,6 --output-delimiter='#' root#x#/root#/bin/bash
このように便利なコマンドcutですが、例えばコロンではなくhtmlタグのように以下のような構造の場合はcutでは苦戦します。
$ echo "<root><x><0><0></root></bin/bash>" | cut -d'>' -f1 <root
cutコマンドでは複数の区切り文字は使えませんので、別コマンドであるawkを採用し、awk -F'[区切り文字]' '{print $表示したい項目}'で値を取得しにいきます。
以上、ご参考ください。