mun*_*ish 3 bash awk shell-script regular-expression
John Goldenrod:(916) 348-4278:250:100:175
Chet Main:(510) 548-5258:50:95:135
Tom Savage:(408) 926-3456:250:168:200
Elizabeth Stachelin:(916) 440-1763:175:75:300
Run Code Online (Sandbox Code Playgroud)
输出应包含仅包含四个字符的名称的行 (john,chet) :
awk '$1 ~ /[a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9][a-zA-Z0-9]" "/ {print}' file
Run Code Online (Sandbox Code Playgroud)
这似乎对我不起作用。我可以在不使用任何 awk 函数的情况下做到这一点吗?
awk 中的字段默认以“ ”分隔,这意味着
$1
不包含空格,因此正确的正则表达式为$1
:
awk '$1 ~ /^[a-zA-Z0-9]{4}$/ {print}' file
Run Code Online (Sandbox Code Playgroud)
如果您想保留原始方法,您也可以$0
改为使用,即:
awk '$0 ~ /^[a-zA-Z0-9]{4}\s/ {print}' file
Run Code Online (Sandbox Code Playgroud)
为了简化事情,您还可以使用\w
而不是明确定义单词字符,即:
awk '$0 ~ /^\w{4}\s/ {print}' file
Run Code Online (Sandbox Code Playgroud)
如果您只想匹配空格而不是其他类似的东西,TAB
您只需替换\s
为“ ”(不带引号)。
您原始方法的另一个问题是缺少锚点。当你没有指定任何^
也不$
可以发生在任何地方你的模式,即模式将匹配Elizabeth Stachelin
带beth
。