查找文件每一行中第一次出现的数字

查找文件每一行中第一次出现的数字

有什么方法可以捕获文件中每行中第一次出现的数字。

例如,我有一个名为 的文件test,内容类似于

AA111 1 DFJKD BKJ3 () A G C TT

BB112 DKFJ 32 JDKFJ JE () DF

113 BDNF 33 3()

期望的输出是

111

112

113

输入中的每一行均以字母数字字符开头(即字母或数字;无特殊字符)

答案1

以下是一些方法:

sed 's/^[^0-9]*\([0-9]\+\).*/\1/' test
cat test | tr -c '0-9\n' ' ' | while read first rest; do echo $first; done
gawk -F '[^0-9]+' '{print $2}' test  # requires non-digits to start line
perl -nE'say/(\d+)/?$1:""' test      # code golf

重击:

while read line; do [[ $line =~ [[:digit:]]+ ]] && echo ${BASH_REMATCH[0]} || echo; done

答案2

这是在 sed 中执行此操作的一种方法:

sed -n 's/^[^[:digit:]]*\([[:digit:]]*\).*/\1/; /[[:digit:]]/p' test > test.out

这:

  1. 去掉任何潜在的前导非数字,
  2. 捕获并\1用数字替换 ( ) 数字和(任何其他内容)
  3. 如果该行包含任何数字,则打印它(否则,默认-n不打印行)

(向 glenn 致敬,鼓励对我原来的 sed 语句进行一些压缩)

答案3

并使用 grep:

grep -oP '^\D*\K\d+' File

相关内容