• ベストアンサー

sedなどで、特定の文字列の後の文字列を抽出したい

sedなどで、特定の文字列の後の文字列を抽出したい シェルスクリプト内で、sedなどを使って特定の文字列の後の文字列を抽出したいのですが、どうすればいいでしょうか? たとえば、abcXYZ123defghiのなかから、XYZの後の「123」を抜き出したいです。 echo abcXYZ123defghi | sed ... のようにして実行させたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

日本語対応sedだと日本語数字混じりでもできますね。 echo abcXYZ12357defghi | sed -e 's/^.*XYZ\([0-90-9]*\).*$/\1/' -e 'y/0123456789/0123456789/' 12357 ※ 使っている日本語コードの指定は必要かも(例えば、 --ctype=EUC) echo abcXYZ12357defghi | sed -e 's/^.*XYZ\([0-90-9]*\).*$/\1/' 12357 ※ 入力フォームに書いている時はASCIIと日本語の判別がし易いけど回答見るとわかり難いですね。後ろの例での結果57とy/0123456789/の数字部分が日本語です。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

「XYZの後の文字列」だと123defghiですが、123を抜き出したいということは、「XYZの後の数字」を抜き出したいと言うことですか? sed 's/.*XYZ\([0-9]*\).*/\1/'

amu
質問者

お礼

ありがとうございます。 言葉足らずでしたが、今回は数字を取り出したかったです。 ただ、特定の文字数の場合や、アルファベットのときもあるので、 教えていただいた方法を応用したいと思います。 アルファベットなら、[0-9]のかわりに[a-z]にすればいいのですよね?

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

echo abcXYZ123defghi | sed -e 's/^.*XYZ\(...\).*$/\1/'

amu
質問者

お礼

ありがとうございます。 こちらは、XYZの3文字を取るということでしょうか?? ちなみに、「^」はどういう意味でしょうか?

関連するQ&A