数字ではないすべての文字を削除する小さな関数を作成しようとしています。
123a45a ---> になります ---> 12345
私が思いついた:
temp=$word | grep -o [[:digit:]]
echo $temp
しかし、代わり12345
に1 2 3 4 5
. スペースを取り除くにはどうすればよいですか?
純粋なバッシュ:
word=123a45a
number=${word//[^0-9]}
ここに純粋なbashソリューションがあります
var='123a45a'
echo ${var//[^0-9]/}
12345
これはあなたが探しているものですか?
kent$ echo "123a45a"|sed 's/[^0-9]//g'
12345
grep & tr
echo "123a45a"|grep -o '[0-9]'|tr -d '\n'
12345
sed
orperl
代わりに使用することをお勧めします:
temp="$(sed -e 's/[^0-9]//g' <<< "$word")"
temp="$(perl -pe 's/\D//g' <<< "$word")"
追加するために編集:本当に を使用する必要がある場合grep
、これが私が考えることができる唯一の方法です:
temp="$( grep -o '[0-9]' <<< "$word" \
| while IFS= read -r ; do echo -n "$REPLY" ; done
)"
. . . しかし、おそらくもっと良い方法があります。(grep -o
ソリューションのように を使用し、出力する行を実行し、改行なしで再出力します。)
追加するために再度編集:代わりに使用できると述べたのでtr
、これははるかに簡単です:
temp="$(tr -cd 0-9 <<< "$word")"
を使用するのはsed
どうですか?
$ echo "123a45a" | sed -r 's/[^0-9]//g'
12345
私が読んだように、あなたは and の使用grep
を許可されているtr
ので、これはトリックを作ることができます:
$ echo "123a45a" | grep -o [[:digit:]] | tr -d '\n'
12345
あなたの場合、
temp=$(echo $word | grep -o [[:digit:]] | tr -d '\n')
Grep
結果を異なる行に返します。
$ echo -e "$temp"
1
2
3
4
5
したがって、フィルタリング中にこれらのスペースを削除することはできませんが、後で次の$temp
ように変換できるため、削除できます。
temp=`echo $temp | tr -d ' '`
$ echo "$temp"
12345