awk中的正则表达式里如果出现正斜杠(forward slash)“/”的解决方法

今天想把 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 )是不一样的。有机会认真学习一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值