【シェルスクリプト】行の後ろから分割する

あるデータ一行を適切な文字で分割したいとき、cutコマンドが使えます。 hoge.txt

1 58.157.93.90 - - [17/Apr/2015:03:24:09 +0900] "GET /feed HTTP/1.1" 200 20250 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"

というデータがあるとき、

$cut -f6 -d'"' hoge.txt
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36

と分割できます。-fで参照するデータ番号、-dで区切り文字を指定します。しかし、分割した上で6番目のデータを参照したいのに1-5番目のデータで”が入ってしまっていたりすると、正しく読めません。 そんなときは後ろから分割しましょう。revコマンドを使います。

$cat hoge.txt
 199.119.124.38 - - [17/Apr/2015:03:24:02 +0900] "GET /feed HTTP/1.1" 304 - "-" "Mozilla/5.0 (compatible; theoldreader.com; 4 subscribers; feed-i d= 5152482a4dce57c2cc0054d5)"

$rev hoge.txt
")5d4500cc2c75ecd4a2842515 =di-deef ;srebircsbus 4 ;moc.redaerdloeht ;elbitapmoc( 0.5/allizoM" "-" - 403 "1.1/PTTH deef/ TEG" ]0090+ 20:42:30:5102/rpA/71[ - - 83.421.911.991 

$rev hoge.txt | cut -f2 -d'"' | rev
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36

逆順にした上で分割し、もう一度逆順にします。