这是我的字符串:
COUNT(*) 154
我需要的部分是154
(空格后的数字)。
我尝试了sed
和cut
命令,例如:for sed:
's/COUNT(\*) //'
所以只有数字仍然存在。但它不起作用。
答案 0 :(得分:2)
echo“COUNT(*)154”| awk -F“”'{print $ 2}'
echo“COUNT(*)154”| cut -d“” - f2
答案 1 :(得分:2)
echo "COUNT(*) 154"|awk '{print $NF}'
echo "COUNT(*) 154"|awk '{print $2}'
答案 2 :(得分:2)
sed解决方案:
sed -n 's/COUNT(\*) \([0-9]\+\)/\1/p' your-file
答案 3 :(得分:2)
bash的内置read
命令可以处理:
$ s='COUNT(*) 154'
$ read a b <<< "$s"
$ echo $b
154
如果有多个以空格分隔的单词,请将字符串读入数组:
$ s='COUNT (*) 154'
$ read -a words <<< "$s"
$ echo "${#words[@]}"
3
$ echo "${words[-1]}"
154
如果像@shelter建议的那样,你的字符串实际上包含换行符而不是空格:
$ s='COUNT(*)
154'
$ { read header; read value; } <<< "$s"
$ echo $value
154
答案 4 :(得分:2)
删除所有非数字的Bash解决方案:
str='COUNT(*) 154'
echo "${str//[^0-9]/}"
输出
154
答案 5 :(得分:1)
相当粗糙,但如果COUNT(*)
字符串没有改变,并且你想使用cut
,你可以使用:
echo "COUNT(*) 154" | cut -c10-
这将从第10个字符开始抓取任何内容。
答案 6 :(得分:1)
另一种选择:
cut -d' ' -f2 <<<'COUNT(*) 154'
您告诉cut
返回第二个以空格分隔的字段。
请注意,单引号输入字符串可确保其文字使用,不会发生变量插值或shell扩展。
更新:解决原始问题:
OP的sed命令's/COUNT(\*) //'
实际上有效:
sed 's/COUNT(\*) //' <<< 'COUNT(*) 154' # -> '154'
请注意,sed
默认使用基本正则表达式,因此()
不得转义 - 相反,-E
期望扩展正则表达式需要转义()
:
sed -E 's/COUNT\(\*\) //' <<< 'COUNT(*) 154' # -> '154'
这让我们想知道(正如@shellter建议的那样)输入字符串是否确实只是文字COUNT(*) 154
并且不包含其他字符。例如\n
,\r
,t
。
检查实际字符的简单方法是使用:
od -a <<< 'COUNT(*) 154'
这将是输入字符串的逐字符表示(严格来说:逐字节),控制字符符号表示;例如nl
为\n
,ht
为\t
,空间为sp
。