【问题标题】:awk multiple word-regex match from a fileawk 来自文件的多个单词正则表达式匹配
【发布时间】:2021-01-27 01:54:07
【问题描述】:

我正在尝试将 awk 用于word-regexp,但无法将其用于/ 搜索以及其他模式。

我有以下名为/tmp/fstab 的文件,我希望从中出现三个正则表达式模式匹配/sap/sap-data/,因为它们出现在第三列,但不知何故没有得到/

$ cat /tmp/fstab

#
# Created by anaconda on Wed Apr 26 14:50:13 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_system-lv_root /                       xfs     defaults        0 0
UUID=90db8951-35c4-4b03-734b-e157a272cf53 /boot                   xfs     defaults        0 0
/dev/mapper/vg_system-lv_tmp /tmp xfs defaults,nodev 0 0
/dev/mapper/vg_system-lv_usr /usr                    xfs     defaults        0 0
/dev/mapper/vg_system-lv_var /var                    xfs     defaults        0 0
/dev/mapper/vg_system-lv_varlog /var/log                xfs     defaults        0 0
/dev/mapper/vg_system-lv_varlogaudit /var/log/audit          xfs     defaults        0 0
/dev/mapper/vg_system-lv_swap swap                    swap    defaults        0 0
/tmp /var/tmp none defaults,nodev,nosuid,bind 0 0
tmpfs /dev/shm tmpfs defaults,nodev,noexec,nosuid 0 0

UUID="dddd13632-d6cf-4ed0-89f0-1026ab2f15af" /sap       xfs     defaults        0 1
UUID="7b896cf9-f842-4d3f-ee33-76c01e71aa69" /sap-data   xfs     defaults        0 1

我的结果:

$ awk '$2 ~ /sap|sap-data/  && $3 ~ /xfs/'  /tmp/fstab
UUID="dddd13632-d6cf-4ed0-89f0-1026ab2f15af" /sap       xfs     defaults        0 1
UUID="7b896cf9-f842-4d3f-ee33-76c01e71aa69" /sap-data   xfs     defaults        0 1

我的愿望:

$ awk '$2 ~ /sap|sap-data/  && $3 ~ /xfs/'  /tmp/fstab
/dev/mapper/vg_system-lv_root /                       xfs     defaults        0 0
UUID="dddd13632-d6cf-4ed0-89f0-1026ab2f15af" /sap       xfs     defaults        0 1
UUID="7b896cf9-f842-4d3f-ee33-76c01e71aa69" /sap-data   xfs     defaults        0 1

感谢您的帮助。

【问题讨论】:

    标签: regex linux shell awk


    【解决方案1】:

    您可以在锚点中使用 / 包装器的交替:

    awk '$2 ~ /^\/(sap-data|sap)?$/ && $3 ~ /xfs/' /tmp/fstab
    
    /dev/mapper/vg_system-lv_root /                       xfs     defaults        0 0
    UUID="dddd13632-d6cf-4ed0-89f0-1026ab2f15af" /sap       xfs     defaults        0 1
    UUID="7b896cf9-f842-4d3f-ee33-76c01e71aa69" /sap-data   xfs     defaults        0 1
    

    正则表达式 ^\/(sap-data|sap)?$ 匹配以 / 开头,后跟可选匹配 sap-datasap,然后再匹配结束。 (...)? 的可选匹配也允许它仅匹配 /

    【讨论】:

    • 我正在学习,有没有另一种最短的形式,不好意思问太多了。
    • awk '$2 ~ /^\/$|sap-data|sap/ && $3 ~ /xfs/' 可能会短一些
    • "^/$|sap(-data)?" 也会更短。不知道如何缩短脚本使其更清晰或更简单!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2012-01-06
    相关资源
    最近更新 更多