重击-提取子字符串直到第一个数字

时间:2019-10-15 12:26:58

标签: bash shell sed grep

我有以下字符串:

例如,

test1234atest1234,而我只想从该字符串中提取test

我尝试了以下

echo "Test12h" | sed -e 's/[0-9]\*$//' but is not working. 

是否有可能提取子字符串直到第一个数字?

请让我知道我想念的。

谢谢

4 个答案:

答案 0 :(得分:6)

从命令的输出中提取与正则表达式匹配的子字符串的合适工具是grep。喜欢,

echo "Test12h" | grep -o '^[^[:digit:]]*'

将输出Test

如果Test12h在变量中,则您甚至不需要外部实用程序。参数扩展可以轻松解决该问题,例如:

var='Test12h'
echo "${var%%[[:digit:]]*}"

答案 1 :(得分:4)

请您尝试以下。

sed 's/\([^0-9]*\).*/\1/' Input_file

OR

sed 's/[0-9][0-9a-zA-Z]*//' Input_file

答案 2 :(得分:1)

您在尝试中犯了一个小错误:

echo "Test12h" | sed -e 's/[0-9].*$//'    # will output Test

\*期望输入中有真实的*

echo "Test1*" | sed -e 's/[0-9]\*$//'     # will output Test

.*可以匹配任意数量的任何字符。

答案 3 :(得分:1)

如果源恰好位于变量中,则可以使用parameter substitution,例如:

$ for test in test1234a test1234 Test12h
do
    echo "${test} => ${test//[0-9]*/}"
done
test1234a => test
test1234 => test
Test12h => Test

一般格式为:${var//Pattern/Replacement};在上面:

  • var ==测试
  • Patter n == [0-9]*(首先出现一个数字,然后是后面的所有内容
  • Replacement ==''(什么都没有,空字符串)

所以我们最终在第一次出现数字后剥离所有内容。