#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)?"
тоже было бы короче. Не уверен, как сокращение сценария делает его более понятным или простым!