Как найти случаи трех последовательных и идентичных словесных символов, например, "aaa", "bbb" и т.д. с помощью sed
и grep
?
Я означал узнавать слова, которые имеют длину 3 и сделаны из повторяющихся символов, т.е. все символы слова должны быть тем же.
Используя sed
:
sed -n '/\(^\| \)\([A-Za-z]\)\2\2\($\| \)/p' file
Используя grep
:
grep '\(^\| \)\([A-Za-z]\)\2\2\($\| \)' file
\(^\| \)
: соответствия или запуск строки или
символ; \([A-Za-z]\)
: соответствия и группы любой прописной или строчный алфавитный символ; \2
: соответствует ранее сгруппированному символу; \2
: соответствует ранее сгруппированному символу; \($\| \)
: соответствия или конец строки или
символ; ~$ cat file
aa word word
word wordaaaword word
aAa word word
aaa word word
word bbb word
word word ccc
aaaa word word
~$ sed -n '/\(^\| \)\([A-Za-z]\)\2\2\($\| \)/p' file
aaa word word
word bbb word
word word ccc
~$ grep '\(^\| \)\([A-Za-z]\)\2\2\($\| \)' file
aaa word word
word bbb word
word word ccc
В такой ситуации я предпочитаю аннотацию (извините, что изменили вопрос! вє)
Вместо открытия, эта версия метки шаблон с "".
sed -r 's/(\w)\1\1/"&"/g;
s/"(..(\w))"\2/\2\1/g'
s/(\w)\1\1/"&"/g;
замены ...aaa
=> ..."aaa"
s/"(..(\w))"\2/\2\1/g
фиксирует больше чем 3 символа ..."aaa"a
=> aaaa
пример:
aa word wordaaaword word aAa word aaa word
word bbb word word ccc aaaa word word
выводы
aa word word"aaa"word word aAa word "aaa" word
word "bbb" word word "ccc" aaaa word word
Обновление (для преодоления новых требований в вопросе):
sed -r 's/\<(\w)\1\1\>/"&"/g' ex1
вывод:
aa word wordaaaword word aAa word "aaa" word
word "bbb" word word "ccc" aaaa word word