次のような文字列を取得しました。
"abcderwer 123123 10,200 asdfasdf iopjjop"
ここで、スキームxx、xxxに従って数値を抽出します。ここで、xは0〜9の数値です。例:10,200。5桁である必要があり、「、」が含まれている必要があります。
どうやってやるの?
ありがとうございました
使用できますgrep
:
$ echo "abcderwer 123123 10,200 asdfasdf iopjjop" | egrep -o '[0-9]{2},[0-9]{3}'
10,200
純粋な Bash の場合:
pattern='([[:digit:]]{2},[[:digit:]]{3})'
[[ $string =~ $pattern ]]
echo "${BASH_REMATCH[1]}"
単純なパターンマッチング(グロブパターン)がシェルに組み込まれています。文字列が含まれて$*
いる(つまり、スクリプトへのコマンドライン引数である、またはset
別の方法で取得した文字列を使用した)場合は、次のことを試してください。
for token; do
case $token in
[0-9][0-9],[0-9][0-9][0-9] ) echo "$token" ;;
esac
done
パターン マッチングと正規表現を確認してください。
リンク:
前述のように、パターン マッチングを利用する 1 つの方法は、grep を使用することです。その他の用途: echo はパターン (グロビング) をサポートし、find は正規表現をサポートします。
やや非典型的な解決策:
< input tr -cd [0-9,\ ] | tr \ '\012' | grep '^..,...$'
(最初の tr は、コンマ、スペース、および数字を除くすべてを削除します。2 番目の tr は、スペースを改行に置き換え、各「数字」を別の行に配置します。grep は、基準に一致するもの以外のすべてを破棄します。)
入力データ文字列を使用した次の例では、sed を使用して問題を解決する必要があります。
$ echo abcderwer 123123 10,200 asdfasdf iopjjop | sed -ne 's/^.*\([0-9,]\{6\}\).*$/\1/p'
10,200