Sed / Awk - 查找恰好 n 个字符长的字符串

spu*_*der 5 grep sed awk

查看 sed、awk 和 grep 的手册页,我无法找到一种方法来搜索正好为 n 个字符长的字符串。

鉴于以下文本文件,我只想提取 6982a9948422

ID                  IMAGE               COMMAND                
CREATED             STATUS              PORTS
6982a9948422        ubuntu:12.04        apt-get install ping   
1 minute ago        Exit 0
Run Code Online (Sandbox Code Playgroud)

该值将始终位于第一列中,并且始终为 12 个字母数字字符。

这是我目前正在尝试的。

 cat /tmp/test | awk {'print $1'} | sed 's/.*\([0-9],[A-Z],[a-z]\{12\}\).*//g'
Run Code Online (Sandbox Code Playgroud)

仅从6982a9948422上面的文本中提取的方法是什么?

llu*_*lua 12

awk 'length($1) == 12 { print $1 }' file
Run Code Online (Sandbox Code Playgroud)

该程序是非常自我记录的,并避免了正则表达式锤子。

awk -v f=1 '$f ~ /^[[:alnum:]]{12}$/ { print $f }' file
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想考虑仅由字母数字字符组成的第一个字段(由空格分隔的字段),则放弃上述内容。

对于awk不支持{x,y}区间正则表达式的实现,您可以将其更改为:

awk -v f=1 'length($f) == 12 && $f !~ /[^[:alnum:]]/ { print $f }' file
Run Code Online (Sandbox Code Playgroud)


Mar*_*ick 6

这将搜索并打印所有从行首开始且长度正好为 12 个字符的字母数字字符串。

grep -o -w -E '^[[:alnum:]]{12}'
Run Code Online (Sandbox Code Playgroud)

对于 macOS 用户。安装 GNU grep 使其工作。可以使用homebrew完成。

  • 我试图使其符合 POSIX。它适用于 FreeBSD 9.1。抱歉,我无法访问 Mac OS X 系统。 (2认同)