2015-02-05 2 views
0

мне нужно регулярное выражение для СЭД (только СЭД, пожалуйста), что поможет мне выяснить, если определенное слово появляется 3 раза в слове так напечатать эту строку ...регулярное выражение для повторения слова

позволяет сказать, что это файл:

abc abc gh abc 
abcabc abc 
ab ab cd ab xx ab 
ababab cc ababab 
abab abab cd abab 

поэтому выход:

P1 F1

abc abc gh abc 
ab ab cd ab xx ab 
abab abab cd abab 

это то, что им пытаются

sed -n '/\([^ ]\+\)[ ]+\1\1\1/p' $1 

его не работает ...:/Что я делаю неправильно ??

это доцент дело, если слово в начале или нет, и они не должны появляться в последовательности

+2

Похоже, у вас есть много домашних заданий ... Вы уже спрашивали [как сравнивать первое слово в строке с последним словом с помощью СЭД?] (Http://stackoverflow.com/q/28318579/1983854), разве вы не использовали ответ Avinash для лучшей попытки? – fedorqui

+0

Я не понимаю, что вы просите @fedorqui –

+0

Также повторное слово не обязательно должно быть 1-м словом в строке справа? – anubhava

ответ

2

Вам нужно добавить .* между ними \1

$ sed -n '/\b\([^ ]\+\)\b.*\b\1\b.*\b\1\b/p' file 
abc abc gh abc 
ab ab cd ab xx ab 
abab abab cd abab 

Я предполагаю, что ваш вход содержит только пробелы и слова.

+0

awesome avinash thanks bro :) @Avinash Raj –

+0

Я не понимаю синтаксис \ b действительно ... мой учитель не объяснил об этом, и похоже, что это заставляет короче короче, может быть, вы объясните? –

+0

'\ b' совпадает между символом слова и символом, отличным от слова. 'A-Z' или' a-z' или '0-9' или' _'. Любой символ, отличный от этих символов, называется символом без слова. –

0

Я знаю, что его попросили sed, но все системы я видел с sed также awk, так вот это awk решение:

awk -F"[^[:alnum:]]" '{delete a;for (i=1;i<=NF;i++) a[$i]++;for (i in a) if (a[i]>2) {print $0;next}}' file 
abc abc gh abc 
ab ab cd ab xx ab 
abab abab cd abab 

Это может быть проще понять, сравнить решения регулярных выражений.

awk -F"[^[:alnum:]]" # Set field separator to anything other than alpha and numerics characters. 
'{ 
delete a   # Delete array "a" 
for (i=1;i<=NF;i++) # Loop trough one by one word 
    a[$i]++   # Store number of hits of word in array "a" 
for (i in a)  # Loop trough the array "a" 
    if (a[i]>2) { # If one word is found more than two times: 
     print $0 # Print the line 
     next  # Skip to next line, so its not printed double if other word is found three times 
    } 
}' file    # Read the file 
Смежные вопросы