префикс уникальных слов с «UNIQUE:» внутри файла, который я пытался использовать команду Perl регулярное выражение, как:Регулярное выражение для соответствия уникальных слов в файлах
perl -e 'undef $/;while($_=<>){s/^(((?!\b\3\b).)*)\b(\w+)\b(((?!\b\3\b).)*)$/\1UNIQUE:\3\4/gs;print $_;}' demo
В файле демо, содержащий:
watermelon banana
apple pear pineapple orange mango
strawberry cherry
kiwi pineapple lemon cranberry watermelon
orange plum cherry
kiwi banana plum
mango cranberry apple
lemon
выход:
watermelon banana
apple pear pineapple orange mango
strawberry cherry
kiwi pineapple lemon cranberry watermelon
orange plum cherry
kiwi banana plum
mango cranberry apple
UNIQUE:lemon
К сожалению, \ 3 обратная ссылка не обрабатывается, если используется заранее.
Есть ли другой способ достичь этого с помощью другого регулярного выражения или с другими обычными командами, доступными на Linux box? (Grep, СЭД, AWK, ...)
Большое спасибо
EDIT: К сожалению, многие из решений работает предоставленному случае только что было неполным, мои извинения за то, что он должен также работа над текстом, как:
{watermelon || banana}
apple = (pear pineapple orange mango)
strawberry cherry
kiwi = pineapple = lemon = cranberry = watermelon
orange - plum = cherry
kiwi = banana + plum
mango = cranberry && apple
lemon
Если это упрощает задачу, слова могут быть с префиксом что-то вроде $ или @.
Обратите внимание, что в этом демо-файле уникальны только «груша» и «клубника». «undef $ /» используется для чтения файла в целом вместо строки за строкой. (((?! Foo).) *) Является нормальным, используемым для соответствия любому, что не содержит «foo». –