查看 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)
这将搜索并打印所有从行首开始且长度正好为 12 个字符的字母数字字符串。
grep -o -w -E '^[[:alnum:]]{12}'
Run Code Online (Sandbox Code Playgroud)
对于 macOS 用户。安装 GNU grep 使其工作。可以使用homebrew完成。