シェルを使用して文字列の一部を抽出する方法は?
文字列の一部位置以降を取得するには次のような方法があります。
- cut
str="Hello World"
suffix=$(echo $str | cut -d' ' -f2)
echo $suffix
ネイティブな日本語に言い換える:
World
cut コマンドでは、-d ‘ ‘ オプションで区切り文字をスペースに、-f2 オプションで2つ目のフィールドを指定し、変数 suffix に代入しています。
- あら?
str="Hello World"
suffix=$(echo $str | awk '{print $2}')
echo $suffix
ネイティブで日本語に言い換えた文:
World
スペース区切りでAwkコマンドは行入力を分割し、2番目のフィールドを出力するように設計されています。
- しかし
str="Hello World"
suffix=$(echo $str | sed 's/[^ ]* //')
echo $suffix
出してください
World
sedコマンドは上述コマンドで正規表現[^ ]*を用いて、最初の空白文字より前の任意の文字列をマッチし、それを空文字列に置き換えることで、残りの部分を抽出しています。
- うちは週末に家族で外食するつもりでいるんです。
str="Hello World"
suffix=$(expr "$str" : '.* \([^ ]*\)$')
echo $suffix
ネイティブな日本語で文章を言い換えてください。1つのオプションのみが必要です。出力:
World
上述コマンドの中で、exprコマンドでは正規表現.*\([^ ]*\)$で最後の半角スペース以降の内容をマッチさせて取り出しています。
状況に応じて適切な方法を選択して、文字列内の特定の位置以降の内容を抽出するための一般的な手法をいくつか示しました。