awk несколько слов -совпадение регулярных выражений из файла

#regex #linux #shell #awk

#регулярное выражение #linux #оболочка #awk

Вопрос:

Я пытаюсь использовать awk для word-regexp bt, но не могу получить его для / поиска вместе с другими шаблонами.

У меня ниже вызван файл /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/  amp;amp; $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/  amp;amp; $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
  

Спасибо за любую помощь.

Ответ №1:

Вы можете использовать это с чередованием / обертки вокруг в якорях:

 awk '$2 ~ /^/(sap-data|sap)?$/ amp;amp; $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-data или sap до конца. Необязательное совпадение (...)? позволяет ему совпадать так / же хорошо.

Комментарии:

1. Я просто учусь, есть ли другая самая короткая форма, извините, что слишком много спрашиваю.

2. awk '$2 ~ /^/$|sap-data|sap/ amp;amp; $3 ~ /xfs/' может быть немного короче

3. "^/$|sap(-data)?" тоже было бы короче. Не уверен, как сокращение сценария делает его более понятным или простым!