Группа сопоставления регулярных выражений awk gensub в квадратных скобках

Ответ оказался проще, чем я думал. Этот SSD был ddснят с другого ноутбука с внешним графическим процессором AMD.

После того, как я удалил старые драйверы Radeon (, следуя этим инструкциям ), время загрузки вернулось к норме.

0
21.09.2020, 18:28
2 ответа
$ echo '-0.005 Tc 0.005 Tw [(T)-8.5(o)-3.2(p)-15.3(ik)]TJ' |
    awk '{print gensub(/.*\[([^]]+)]TJ/,"\\1",1)}'
(T)-8.5(o)-3.2(p)-15.3(ik)

Веб-сайты, такие как regex101, практически бесполезны для определения регулярных выражений для использования в инструментах командной строки, поскольку они не учитывают должным образом версии регулярных выражений (BRE, ERE или PCRE )и/или разделители, используемые любым инструментом и/или поддерживает ли инструмент обратные ссылки в регулярном выражении и/или соответствующий текст, и/или имеет ли данная версия данного инструмента какие-либо частные расширения, и/или какие-либо параметры, которые инструмент может иметь, чтобы повлиять на его поведение по отношению к регулярным выражениям и т. д.

2
18.03.2021, 23:03
$ s='-0.005 Tc 0.005 Tw [(T)-8.5(o)-3.2(p)-15.3(ik)]TJ'

$ # if you want to delete []TJ
$ echo "$s" | awk '{print gensub(/\[([^]]+)]TJ/, "\\1", "g")}'
-0.005 Tc 0.005 Tw (T)-8.5(o)-3.2(p)-15.3(ik)

$ # if you just want the portion inside []TJ
$ echo "$s" | awk 'match($0, /\[([^]]+)]TJ/, a){s = a[1]; print s}'
(T)-8.5(o)-3.2(p)-15.3(ik)

GNU awkподдерживает третий аргумент для метода match, что упрощает извлечение групп захвата. Первый элемент массива будет иметь полное совпадение. Второй элемент будет содержать часть, совпадающую с первой группой, третий элемент будет содержать часть, совпадающую со второй группой, и так далее.

2
18.03.2021, 23:03

Теги

Похожие вопросы