grep не находит комбинацию \ n и дефисов вместе (но может найти их отдельно) - PullRequest
1 голос
/ 15 июля 2011

У меня есть несколько подходящих файлов, в которых есть такой код:

---

some code

---

Иногда после открытия --- или до закрытия --- есть пустая строка. Я хочу сжать их (избавиться от ненужных «внутренних» пустых строк). Я вполне готов сделать это вручную, но я хотел бы распечатать список, где все это. Я на самом деле ищу \n\n---\n\n, но в следующем я просто покажу свою работу на \n\n---.

Я пробовал много вариантов, но безуспешно:

grep -E \n\n---\n\n file.apt

Избегал обратной косой черты, пробовал \ r, одинарные и двойные кавычки, grep -, без -E, ^ $ и т. Д. Следующие работы:

grep \n\n file.apt

Он печатает все правильные строки. Следующее также работает:

grep "\---" file.apt

Он печатает все строки с 3 дефисами. Однако следующее ничего не печатает:

grep "\n\n\---" file.apt

Если я попробую этот шаблон (\n\n---) в vi, я найду то, что ищу. Все неудачные попытки grep ничего не выводят. Так как я могу найти "\n\n---"?

Я на Mac OSX, командная строка терминала.

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Насколько я понимаю, grep соответствует только одной строке за раз.Если вы хотите избавиться от пустых строк, попробуйте запустить

grep ^$ -v file.apt

^ $ для каждой пустой строки, а затем -v выведет только строки, которые не совпадают.

0 голосов
/ 15 июля 2011

Это в основном дубликат: Как найти шаблоны в нескольких строках, используя grep?

Там есть хорошие ответы, которые должны вам помочь.Я бы, вероятно, использовал опцию sed для того, что вы делаете.

...