今天想把 passwd 里的用户名和对应文件夹列出来,其中用户要筛选在“/share/home”里的。
首先查看了一下网上的 awk 说明,写了下面一行:
ypcat passwd | awk -F: '{print $1,$6}'
这样可以把用户名和所在文件夹筛出来,但是不能筛选特定文件夹里的信息。
因此使用正则表达式去匹配。但是在匹配过程中发现,由于正则表达式是需要夹在两条正斜杠中的,而 $6 当中本来就有正斜杠,于是想过用以下方法,但都没有成功,最后用了两次正则表达式勉强可以:
# 1. 给字符串切片
ypcat passwd | awk -F: '${6:1:5}=="share" && ${6:7:4}=="home" {print $1,$6}'
# 结果:提示出错,${6:1:5}有问题
# 2. 使用转义字符“\/”
ypcat passwd | awk -F: '$6~/\/share\/home/ {print $1,$6}'
# 结果:提示忽略转义字符,啥也没输出
# 3. 使用引号或者中括号
# 代码略
# 结果:依旧不行
# 4. 使用两次正则表达式
ypcat passwd | awk -F: '$6~"share" && $6~"home" {print $1,$6}'
# 结果:成功
但是总感觉不够好,所以又搜了一遍网络,最后找到了一个网站,提示可以使用自定义变量:
# 使用自定义变量
ypcat passwd | awk -F: '$6~e {print $1,$6}' e="/share/home"
# 结果:成功
才恍然大悟,其实自定义变量教程里是有的,还是自己没有仔细思考。所以下次要注意。
网站里也提到了动态正则表达式(dynamic regex)和常规正则表达式(regex constant )是不一样的。有机会认真学习一下。