在分隔符之间提取数据

时间:2014-04-01 16:54:40

标签: bash

我从另一个脚本获得了一个带有这些字符串的.txt - >

<li this="that" id="number-*">
<li me="somebody" id="number-*">

*实际上是一个随机数,我需要得到它,&#34;数字&#34;不会改变。

有没有办法使用Bash内置命令来做到这一点?

5 个答案:

答案 0 :(得分:1)

使用grep -oP

s='<li this="that" id="number-1234">'
echo "$s"|grep -oP 'number-\K[0-9]+'
1234

对于那些不支持grep -P的旧系统,这是一个awk版本:

echo "$s" | awk -F 'number-' '{sub(/[^0-9]+/, "", $2); print $2}'
1234

答案 1 :(得分:1)

使用GNU grep

grep -oP 'number-\K\d+' inputfile

grep -oP '(?<=number-)\d+' inputfile

答案 2 :(得分:0)

我不了解bash builtins,但如果你只想要数字:

egrep -o '[0-9]+'

应该为你做。

答案 3 :(得分:0)

一个人cutsed

cut -d- -f 2 filename | sed 's/">//g'

示例:

$ s='<li this="that" id="number-1234">'
$ echo "$s" | cut -d- -f 2 | sed 's/">//g'
1234

答案 4 :(得分:0)

仅使用内置命令:

while read; do
    [[ $REPLY =~ number-([[:digit:]]+) ]] && echo ${BASH_REMATCH[1]}
done < input.txt
  • 将文件的每一行读取到内置$REPLY变量,逐一
  • 应用正则表达式number-([[:digit:]]+)以匹配您需要的数字
  • 如果正则表达式匹配,则回显子匹配