5

我想打印以四位数开头的文件中的所有行。我试过这个 allredy 但它不起作用:

cat data.txt | awk --posix '{ if ($1 ~ /^[0-9]{4}/) print $1}'

不产生输出

下一行打印所有以数字开头的 lins:

cat data.txt | awk --posix '{ if ($1 ~ /^[0-9]/) print $1}'
4

3 回答 3

7

使用 awk:

$ awk '/^[0-9][0-9][0-9][0-9]/ {print $1}' your_file

即,检查以该行开头的 4 位数字。

更新:第 5 个字符不是数字。

$ awk '/^[0-9][0-9][0-9][0-9]([^0-9].*)?$/ {print $1}' your_file

请注意,不必使用该{ if ($1 ~ /^[0-9]/)句子,只需. 即可/^.../

于 2013-04-29T14:47:36.247 回答
2

对于打印与给定正则表达式匹配的行grep是第一个要抓取的工具:

grep -Eo '^[0-9]{4}[^0-9]*\s' file
于 2013-04-29T14:46:45.317 回答
0

我看不到问题所在。

awk --posix '{ if ($1 ~ /^[0-9]{4}/) print $1}'<<EOT
1234 qwer
234 asdf
34456 qwe
EOT

得到

1234
34456

正如所料...

如果您需要完全匹配四位数字,那么您可以使用:

awk --posix '$1~/^[0-9]{4}$/{print $1}'<<EOT
1234 qwer
234 asdf
34456 qwe
EOT

输出:

1234

但实际上你不需要运行awk,如果你在bash

while read f rest; do
  [[ $f =~ ^[[:digit:]]{4}$ ]] && echo $f
done <<EOT
1234 qwer
234 asdf
34456 qwe
EOT

输出:

1234
于 2013-04-29T14:49:38.817 回答