2

数字ではないすべての文字を削除する小さな関数を作成しようとしています。

123a45a ---> になります ---> 12345

私が思いついた:

temp=$word | grep -o [[:digit:]]
echo $temp

しかし、代わり123451 2 3 4 5. スペースを取り除くにはどうすればよいですか?

4

7 に答える 7

8

純粋なバッシュ:

word=123a45a 
number=${word//[^0-9]}
于 2013-05-23T15:13:43.577 に答える
6

ここに純粋なbashソリューションがあります

var='123a45a'
echo ${var//[^0-9]/}
12345
于 2013-05-23T15:13:54.030 に答える
4

これはあなたが探しているものですか?

kent$  echo "123a45a"|sed 's/[^0-9]//g'
12345

grep & tr

echo "123a45a"|grep -o '[0-9]'|tr -d '\n'
12345
于 2013-05-23T15:13:08.837 に答える
3

sedorperl代わりに使用することをお勧めします:

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")"
于 2013-05-23T15:13:14.447 に答える
2

を使用するのは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')
于 2013-05-23T15:13:20.220 に答える
0

Grep結果を異なる行に返します。

$ echo -e "$temp"
1
2
3
4
5

したがって、フィルタリング中にこれらのスペースを削除することはできませんが、後で次の$tempように変換できるため、削除できます。

temp=`echo $temp | tr -d ' '`
$ echo "$temp"
12345
于 2013-05-23T15:20:19.777 に答える