2013-10-02 4 views
0

Я пытаюсь найти определенный шаблон в виде текстового файла, используя Grep внутри сценария оболочки БорнаИспользование Grep, чтобы найти определенный шаблон в строке

Стиль: word1 word2 word3

Я хочу напечатать все это не тот стиль. До сих пор я использовал

grep -e '[[:space:]]\{2,\}' somefile 

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

Моим другим методом было бы также подсчитать, сколько слов есть в строке и если оно превышает 3, чтобы напечатать строку. Или проверить пробел в конце третьего слова, но я не уверен, как это будет отформатировано.

+0

Используйте опцию -v. – Ingo

+0

Цель grep - найти строки, содержащие определенные шаблоны. Может быть, попытайтесь больше подумать над заголовком для своего следующего вопроса? – tripleee

+0

Педантичное примечание: маловероятно, что вы на самом деле используете оболочку Bourne, а скорее какую-то совместимую с POSIX оболочку с именем 'sh', которая имеет больше возможностей, чем присутствовала в исходной оболочке Bourne. – chepner

ответ

0

Я не уверен, если это то, что вы хотели, но здесь:

]$ cat input 
one 

one two 
one two three 
one two three four 

]$ grep -v -e "^[^[:space:]]\+ [^[:space:]]\+ [^[:space:]]\+$" input 
one 

one two 
one two three four 

Мы не совпадают:

  • любое количество не пространств: [^[:space:]]\+
  • пока мы получить пробел
  • повторный 3 раз
  • все это должно быть в одной строке: ^...$
  • и мы отрицать это с -v вариант
+0

Эй, это прекрасно работает! как я могу получить выход, выходящий на отдельных линиях, а не за один раз? Я использую эхо в скрипте оболочки bourne – thunderfox

+0

Я не уверен, что понимаю. Вы спрашиваете, как заставить «эхо» распечатать несколько строк? – danadam

+0

nevermind, я использовал printf с \ n, спасибо вам: D – thunderfox

Смежные вопросы