awk multiple word-regex match from a file

Viewed 81

I am trying to use awk for word-regexp bt not able to get it for / search along with others patterns.

I have below file called /tmp/fstab from which i want three regex pattern match /sap, /sap-data and / from the third column as they appeared in but somehow not getting it for /.

$ 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

My Result:

$ 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

My Desired:

$ 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

Thank for any help.

1 Answers

You may use this with an alternation of / wrapper around in anchors:

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

Regex ^\/(sap-data|sap)?$ matches starting / followed by an optional match of sap-data or sap before end. Optional match of (...)? allows it to match just / as well.

Related