2016-11-17 10 views
1

Примера (файл имеет следующий текст):Как подсчитать Происшествие 2 слова в случайных местах в строке в UNIX

tom is really really cool! joe for the win! 
tom is actually smart. 
tom and joe are best buddies. Joe is smart. 
joe works hard 

Теперь я хочу найти не строки в этом файле, который имеет Джо и Том используется в одной строке, используя UNIX. , так что ответ должен быть 2 (то есть только первые и четвертые строки)

+0

'' joe' и tom' используются в одной строке, в строках 1 и 3, а не 4. – Inian

+0

Поскольку вы довольно новичок здесь, видите [Когда пользователь получает хороший answer] (http://stackoverflow.com/help/accepted-answer) – Inian

+0

Ответ прост: постройте DFA https://en.wikipedia.org/wiki/Deterministic_finite_automaton (это именно то, что делает grep, внутренне). ваш случай, вы можете даже построить его вручную, есть только два шаблона, которые разделяют только одну букву, и они не перекрываются. – wildplasser

ответ

1

Вы можете использовать простой grep с флагом -c для подсчета экземпляров. Для вашего входа file,

grep 'tom.*joe\|joe.*tom' file 
tom is really really cool! joe for the win! 
tom and joe are best buddies. Joe is smart. 

grep -c 'tom.*joe\|joe.*tom' file 
2 
+1

Я писал такую ​​длинную программу. :(grep настолько мощный! –