我的字符串是:
UNSORTED SORTED
Address Type Address Type
1.1p A 1.1p A
1.2p A 1.2p A
1.3p A 1.3p A
1.4p A 1.4p A
2.1p A 3.1p A
2.2p A 3.2p A
2.3p A 3.3p A
2.4p A 3.4p A
3.1p A 5.1p A
3.2p A 5.2p A
3.3p A 5.3p A
3.4p A 5.4p A
4.1p A 2.1p A
4.2p A 2.2p A
4.3p A 2.3p A
4.4p A 2.4p A
5.1p A 4.1p A
5.2p A 4.2p A
5.3p A 4.3p A
5.4p A 4.4p A
6.1p B 7.1p B
6.2p B 7.2p B
6.3p B 7.3p B
6.4p B 7.4p B
7.1p B 9.1p B
7.2p B 9.2p B
7.3p B 9.3p B
7.4p B 9.4p B
8.1p B 6.1p B
8.2p B 6.2p B
8.3p B 6.3p B
8.4p B 6.4p B
9.1p B 8.1p B
9.2p B 8.2p B
9.3p B 8.3p B
9.4p B 8.4p B
10.1p B 10.1p B
10.2p B 10.2p B
10.3p B 10.3p B
10.4p B 10.4p B
我想在0%中返回0。
问题是这个字符串的长度是可变的,但只有一个字符。我在bash变量中有这个字符串时,我试图检索数据包丢失的整数(或十进制)值。
我曾经尝试过cut和awk,但是我在这个问题上绞尽脑汁。
谢谢!
答案 0 :(得分:2)
为演示目的更改值:使用正则表达式并捕获百分号前的数字
$ str=' PING google.com ... 3 packets transmitted, 3 received, 42% packet ...'
$ [[ $str =~ ([0-9]+)% ]] && num=${BASH_REMATCH[1]}
$ echo $num
42
使用perl兼容的正则表达式使用GNU grep:
$ grep -oP '\d+(?=%)' <<<"$str"
42
答案 1 :(得分:2)
sed
sed -r 's/.*\b([0-9]+)%.*/\1/' <<< $str
答案 2 :(得分:1)
如果您的数据与显示的样本相同,则以下内容可能会对您有所帮助。
awk '{print $18+0}' Input_file