Отфильтруйте последовательное идентичное использование символов Sed и Grep

Как найти случаи трех последовательных и идентичных словесных символов, например, "aaa", "bbb" и т.д. с помощью sed и grep?

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

0
задан 4 November 2015 в 13:53

2 ответа

Используя 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
1
ответ дан 1 October 2019 в 06:54

В такой ситуации я предпочитаю аннотацию (извините, что изменили вопрос! ☺)

Вместо открытия, эта версия метки шаблон с "".

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
1
ответ дан 1 October 2019 в 06:54

Другие вопросы по тегам:

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