拆分包含特殊字符的字符串

时间:2013-12-23 15:43:55

标签: bash

这是我的字符串:

COUNT(*) 154

我需要的部分是154(空格后的数字)。

我尝试了sedcut命令,例如:for sed:

's/COUNT(\*) //'

所以只有数字仍然存在。但它不起作用。

7 个答案:

答案 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\rt

检查实际字符的简单方法是使用:

od -a <<< 'COUNT(*) 154'

这将是输入字符串的逐字符表示(严格来说:逐字节),控制字符符号表示;例如nl\nht\t,空间为sp