使用 sed 解析字符串
Parsing a string with sed
我有一个像 prefix-2020.80-suffix-1
这样的字符串
以下是输入字符串
的所有可能组合
"2020.80-suffix-1"
"2020.80-suffix"
"prefix-2020.80"
"prefix-2020.80-1"
我需要剪切并分配 2020
给一个变量,但无法得到我想要的输出
这是我到目前为止得到的...
set var=`echo "prefix-2020.80-suffix-1" | sed "s/[[:alnum:]]*-*\([0-9]*\).*//"`
我的正则表达式不适用于其他情况,我不知道为什么!它比 python 的正则表达式语法
更复杂
你可以使用这个grep -oP
:
echo "prefix-2020.80-suffix-1" | grep -oP '^([[:alnum:]]+-)?\K[0-9]+'
2020
这应该适用于您的所有输入
sed 's/.*\(^\|-\)\([0-9]*\)\..*//' test
匹配行的开头或直到 -[number].
的所有内容并捕获数字。
您使用的原件的问题是您没有考虑没有前缀的情况。
使用 sed(带有扩展正则表达式):
echo "prefix-2020.80-suffix-1" |sed -r 's/^([^-]*-|)([0-9]+).*//'
使用grep
:
echo "prefix-2020.80-suffix-1" |grep -oP "^([^-]*-|)\K\d+"
2020
-P
用于 Perl 正则表达式。
我有一个像 prefix-2020.80-suffix-1
这样的字符串
以下是输入字符串
"2020.80-suffix-1"
"2020.80-suffix"
"prefix-2020.80"
"prefix-2020.80-1"
我需要剪切并分配 2020
给一个变量,但无法得到我想要的输出
这是我到目前为止得到的...
set var=`echo "prefix-2020.80-suffix-1" | sed "s/[[:alnum:]]*-*\([0-9]*\).*//"`
我的正则表达式不适用于其他情况,我不知道为什么!它比 python 的正则表达式语法
更复杂你可以使用这个grep -oP
:
echo "prefix-2020.80-suffix-1" | grep -oP '^([[:alnum:]]+-)?\K[0-9]+'
2020
这应该适用于您的所有输入
sed 's/.*\(^\|-\)\([0-9]*\)\..*//' test
匹配行的开头或直到 -[number].
的所有内容并捕获数字。
您使用的原件的问题是您没有考虑没有前缀的情况。
使用 sed(带有扩展正则表达式):
echo "prefix-2020.80-suffix-1" |sed -r 's/^([^-]*-|)([0-9]+).*//'
使用grep
:
echo "prefix-2020.80-suffix-1" |grep -oP "^([^-]*-|)\K\d+"
2020
-P
用于 Perl 正则表达式。