Как искать и заменить несколько игл одним словом через одно выражение?

Можно использовать tcpdump.

# tcpdump filter for HTTP GET 
sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

# tcpdump filter for HTTP POST 
sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

Для использования решения tshark см.:

https://serverfault.com/questions/84750/monitoring-http-traffic-using-tcpdump

8
25.11.2011, 01:14
3 ответа

Использовать -r опция для расширенного regexp синтаксиса:

sed -r -e 's/foo|bar/narf/g'

Иначе выйдите из разъединения как \|:

sed -e 's/foo\|bar/narf/g'
10
27.01.2020, 20:10

Существует много вариаций на синтаксис регулярного выражения. Самые первые инструменты в мире Unix, который имел регулярные выражения, не имели полных возможностей регулярных выражений, только наборы символов ([…] и .), повторение (*) и привязки к строке (^ и $). Основные регулярные выражения только имеют эти операторы. Sed является олдскульным инструментом и использует основной regexps.

Много sed реализаций имеют расширения для полного соответствия regexp. Поскольку символ | обозначает себя, необходимо использовать \| для чередования, и так же \( и \) для группировки. Обратите внимание, что стандарт POSIX не передает под мандат это \| поддерживайтесь в основных регулярных выражениях, и некоторые системы (например, OpenBSD) не имеют его.

Некоторые версии sed имеют опцию переключиться на расширенные регулярные выражения, где (…) используется для группировки и | для чередования. С GNU sed (т.е. в соответствии с Linux или Cygwin) или Busybox, передайте -r опция. На FreeBSD или OSX, передайте -E опция.

Если Ваш sed не имеет чередования, можно звонить awk вместо этого. Это получает мандат POSIX, но немного подробный для этой задачи, и это не поддерживает обратные ссылки.

awk '{gsub(/foo|bar/, "narf")}' <fileName.old >fileName.new

Между прочим, только GNU и замена файла поддержки Busybox sed на месте. Awk и другие версии sed не делают. Посмотрите, что я могу заставить 'сокращение' изменить файл на месте?

Если у Вас есть Perl, это часто удобно в one-tool-does-all способе для острот обработки текста. Большая часть того, что легко в sed, awk и остальное не намного более трудно в Perl, и можно сойти с рук изучение сингла (если сложный) инструмент.

perl -i -pe 's/foo|bar/narf/g' fileName
6
27.01.2020, 20:10

Вы можете использовать Vim в режиме Ex:

ex -sc '%s/\vPA|QU/RO/g|x' file
  1. % выберите все строки

  2. s замените

  3. \ v включить магию

  4. g глобальная замена

  5. x сохранить и закрыть

0
27.01.2020, 20:10

Теги

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