захват каждого слова, содержащего регулярное выражение - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь написать скрипт sed, который находит каждое слово, содержащее определенный шаблон, а затем добавляет все слова, содержащие этот шаблон.Например:

foobarbaz barfoobaz barbazfoo barbaz

может превратиться в:

quxfoobarbaz quxbarfoobaz quxbarbazfoo barbaz

Я понимаю основы групп захвата и обратных ссылок, но у меня все еще проблемы.В частности, я не могу получить его таким образом, чтобы он захватывал каждое целое слово отдельно.

s/\(.*\)men\(.*\)/ not just the \1men\2, but the \1women\2 and \1children\2 too /

Я пытался использовать \s для пробела, как рекомендуют многие сайты, но sed рассматривает \s как отдельные символы \ и s

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Работает нормально, если в каждом слове нет пробелов.

echo "foobarbaz barfoobaz barbazfoo barbaz" | sed 's/\([^ ]*foo[^ ]*\)/qux\1/g'
0 голосов
/ 25 мая 2018

Вы можете использовать непробельный символ \S следующим образом:

sed 's/\S*foo\S*/qux&/g' <<< "foobarbaz barfoobaz barbazfoo barbaz"

это будет соответствовать словам, содержащим foo.Строка замены qux& будет предшествовать каждому сопоставленному шаблону с qux.Выход:

quxfoobarbaz quxbarfoobaz quxbarbazfoo barbaz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...