如何简化此命令以仅使用 awk?

如何简化此命令以仅使用 awk?
awk '/user/ {print $1 }' /etc/userdomains | sed 's/://'

/etc/userdomains 的格式是

domain.tld: user
otherdomain.tld: otheruser

答案1

最简单的方法是将字段分隔符设置为“:”

awk -F":" '$2~/user/{print $1}' /etc/userdomains

And if you want to check for exact username, 

awk -F"[ \t]*:[ \t]*" '$2=="user"{print $1}' /etc/userdomains

答案2

awk有一个sub(regexp, replacement, target)函数可以查找第一次出现的regexpin target($0默认情况下) 并将其替换为replacement(in-place):

awk '/user/ {sub(/:/, ""); print $1}' /etc/userdomains

答案3

您可以使用gsubinawk删除:字符串中的所有 s。

awk '/user/ {gsub(":", ""); print $1}' /etc/userdomains

答案4

您可以使用tr代替 sed:

awk '/user/ {print $1 }' /etc/userdomains | tr -d ":"

虽然我不认为这比仅仅使用 awk 有什么好处(我也不认为 sed 有什么问题)。

相关内容