我想打印以四位数开头的文件中的所有行。我试过这个 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}'
我想打印以四位数开头的文件中的所有行。我试过这个 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}'
使用 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]/)
句子,只需. 即可/^.../
。
对于打印与给定正则表达式匹配的行grep
是第一个要抓取的工具:
grep -Eo '^[0-9]{4}[^0-9]*\s' file
我看不到问题所在。
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