我有以下字符串:
例如, test1234a
或test1234
,而我只想从该字符串中提取test
。
我尝试了以下
echo "Test12h" | sed -e 's/[0-9]\*$//' but is not working.
是否有可能提取子字符串直到第一个数字?
请让我知道我想念的。
谢谢
答案 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
==''(什么都没有,空字符串)所以我们最终在第一次出现数字后剥离所有内容。