【TIPS,Linux】シェル(awk)で最後のフィールドのみを抽出する

スポンサーリンク

コンテンツ

以外とむずかしかったのでメモ

こんなデータから

file:///home/hogehoge/config.bin
file:///home/hogehoge/Documents/23493485345.png

こんなのを取り出す

config.bin
23493485345.png

末尾が必ずファイル名なので、フルパスからファイル名を取り出す感じ。nautilusスクリプトで必要になった。フルパスにデータの区切り文字(/)がいくつあるかわからない=フィールド数が可変、不定長なのでちょっとむずかしそう。固定ならcutでバッサリ抽出できる。

sedむずかしいんです><

最初は「検索ならsed」と思ったのでsedでやろうとしたんですが、sedむずかしい。最後のフィールドのみを抽出→後方参照を使う、という考え方。すぐ忘れるsedの後方参照の仕方 – afroのメモさんの記事から後方参照の仕方を引用すると

    $ echo ABCD | sed -E "s/(C)/\1\1/g"
    ABCCD
    $ echo ABCD | sed -e "s/\(C\)/\1\1/g"
    ABCCD

という感じらしい。sed得意じゃないのにさらに(まで入るともうなにがなんだか(´・ω・`)

助けてawk!

あと使えそうなのはフィールド単位の処理に定評のあるawkぐらいしか…。awkでだめなら諦める、と思っていたらできた(∩´∀`)∩ワーイ

awk -F / '{print $NF}'

たったこれだけでできた、恐るべしawk…

以下のブログが参考になりました。
“awk” 最後の列を表示する @LCD -Linux Command Dictionary-|Replog!株式会社レップワンスタッフによるブログです