Почему регулярное выражение «\ .pdf» `соответствует` /… / pdf… /… `в gawk, но не в mawk?

Хорошо, теперь у меня mpd 0.16, работаю над сжатием благодаря @FaheemMitha и @derobert. Я взял исходники mpd из репозиториев wheezy с помощью apt-get source mpd = 0.16.7-2 . Для этого вы должны сначала добавить репозитории src в ваш файл sources.list. В случае, если ваш исходный файл похож на мой, вам нужно изменить строки, относящиеся к backports, с:

deb http://ftp.gr.debian.org/debian wheezy-backports main contrib non-free
deb http://ftp.gr.debian.org/debian wheezy main contrib non-free

на

deb-src http://ftp.gr.debian.org/debian wheezy-backports main contrib non-free
deb-src http://ftp.gr.debian.org/debian wheezy main contrib non-free

. Если у вас не было репозиториев backports в sources.list, просто добавьте две вышеуказанные строки (с соответствующий код страны). После изменения файла sources.list запустите apt-get update . Чтобы проверить, что вы сделали, вы можете запустить apt-cache showsrc mpd | less и проверьте, указана ли там версия 0.16.7-2.

Если вы не видите его, значит, что-то не так, вернитесь и перепроверьте свои источники. Вы всегда можете проверить, есть ли лишние файлы .list в /etc/apt/sources.list.d / , которые могут вызвать проблемы, и закомментируйте их.

Теперь перейдите в / usr / local / src и создайте в нем каталог с именем mpd и cd . Здесь вы загрузите исходный код пакета mpd для его сборки. Сначала запустите dch -i , чтобы создать новую запись в журнале изменений и не создавать конфликтов или перезаписей. Новая запись может выглядеть так:

mpd (0.16.7-2.username) UNRELEASED; urgency=low

  * Backport to wheezy.

 -- User <user@domain>  Sat, 01 Mar 2014 22:34:34 +0530

Запустите apt-get source mpd = 0.16.7-2 , загрузите tars для файла и распакуйте их в новый каталог mpd-0.16 .7 .

cd в этот каталог и запустите debuild -uc -us . Если он возвращает ошибки о неудовлетворенных зависимостях, запустите apt-get build-dep mpd . Скорее всего, зависимостей сборки для сжатой версии mpd будет достаточно. После установки зависимостей сборки снова запустите debuild -uc -us . Если он по-прежнему возвращает ошибки зависимостей, выполните apt-get build-dep mpd = 0.16.7-2 и попробуйте снова собрать пакет с помощью debuild -uc -us .

Если это тоже не помогло, вы можете попробовать установить зависимости вручную. Если вы не можете найти необходимые зависимости в обычных репозиториях, вы можете попробовать выполнить установку из squeeze-backports с помощью apt-get install -t squeeze-backports package . Примечание: для этого вы должны иметь squeeze-backports в вашем файле sources.list:

deb http://backports.debian.org/debian-backports/ squeeze-backports main contrib non-free

Теперь, когда проблема с зависимостями предположительно решена, запустите debuild -uc -us , и это должно сгенерировать файл.deb в родительском каталоге (в данном случае / usr / local / src / mpd / ). Теперь продолжайте и cd .. , а затем запустите dpkg -i name_of_the_generated_package.deb , и это должно установить пакет.

7
18.02.2019, 14:31
3 ответа

Как видно из таблицы здесь , в регулярном выражении в awk обратная косая черта, за которой не следует до 3 восьмеричных цифр, другая обратная косая черта или любое из ["/abfnrtv]не определены.

Лучше всего писать [.]вместо \., если вам нужен литерал ..

Обратите внимание, что в данном случае поведение mawkне соответствует общепринятой практике; в то время как все реализации awk, о которых я знаю, позволят вам экранировать \., \+, \*внутри литерала регулярного выражения (/foo\.bar/), только mawkпозволит вам сделать то же самое внутри строки, используемой как регулярное выражение($0~"foo\.bar").

5
27.01.2020, 20:13

Как и во многих других языках, \xимеет другое значение в строках или регулярных выражениях. Вы можете использовать либо

$NF ~ /\.pdf/

или

$NF ~ "\\.pdf"

Строка "\.pdf"— это просто странный способ сказать".pdf"

2
27.01.2020, 20:13

Используйте правильный инструмент для работы. У вас есть эти 2 выражения:

$i ~ "string"
$NF ~ "\.pdf"

но в обоих случаях шаблоны представляют собой буквенные строки. Так что нет причин даже заморачиваться с сопоставлением регулярных выражений просто используйте буквальное сопоставление строк:

index($i, "string")
index($NF, ".pdf")

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.html#tag_20_06_13_13

3
27.01.2020, 20:13

Теги

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