ちょっとしたスクリプトを作っていた際、文字列の抜き出しを多様する処理があったので忘れないように残しておく。
●左から◯文字
cut -c [開始文字(個数)]-[終了文字(個数)]
[root@test-node ~]# # 例:左から1文字目~4文字目 [root@test-node ~]# echo abcdefghijk | cut -c 1-4 abcd [root@test-node ~]# [root@test-node ~]# # 例:左から2文字目~5文字目 [root@test-node ~]# echo abcdefghijk | cut -c 2-5 bcde
●左から◯文字を除外する
cut -c [開始文字(個数)+1]-
[root@test-node ~]# # 例:左から3文字を除外 [root@test-node ~]# echo abcdefghijk | cut -c 4- defghijk
●右から◯文字
rev | cut -c [開始文字(個数)]-[終了文字(個数)] | rev
[root@test-node ~]# # 例:右から1文字目~5文字目 [root@test-node ~]# echo abcdefghijk | rev | cut -c 1-5 | rev ghijk [root@test-node ~]# echo abcdefghijk | rev | cut -c 3-6 | rev fghi
●右から◯文字を除外する
rev | cut -c [開始文字(個数)+1]- | rev
[root@test-node ~]# # 例:右から4文字を除外 [root@test-node ~]# echo abcdefghijk | rev | cut -c 5- | rev abcdefg
●文字A~文字Bまでを抽出する
awk '{print substr($0, index($0, "b"), index($0, "e") -1 )}'
[root@test-node ~]# # bからgまでを抽出 [root@test-node ~]# echo abcdefghijk | awk '{print substr($0, index($0, "b"), index($0, "g") -1 )}' bcdefg [root@test-node ~]# # bからeまでを抽出(1回のみ) [root@test-node ~]# echo abcdefabcdef | awk '{print substr($0, index($0, "b"), index($0, "e") -1 )}' bcde
●文字A~文字Bまでを除外する
awk '{sub("文字A.*.文字B", "");print $0;}'
[root@test-node ~]# # 「_」から「_」までを除外して表示する [root@test-node ~]# echo aaa_bbbb_cccc | awk '{sub("_.*._", "");print $0;}' aaacccc
●指定した文字以降を抽出する
awk '{print substr($0, index($0, "文字"))}'
[root@test-node ~]# # b以降を出力させる [root@test-node ~]# echo aaa_bbbb_cccc | awk '{print substr($0, index($0, "b"))}' bbbb_cccc
●指定した文字以降を除外する
awk '{sub("文字A.*", "");print $0;}'
[root@test-node ~]# # b以降を除外する [root@test-node ~]# echo aaa_bbbb_cccc | awk '{sub("b.*", "");print $0;}' aaa_
![すべてのUNIXで20年動くプログラムはどう書くべきか デプロイ・保守に苦しむエンジニア達へ贈る[シェルスクリプトレシピ集]](http://ecx.images-amazon.com/images/I/51opLnpg2vL._SL160_.jpg)