Як надати шаблон для нового рядка в grep? Новий рядок на початку, новий рядок в кінці. Не регулярний вираз. Щось на зразок \ n.
$. Це дещо обмежено, але корисно в простих випадках.
Як надати шаблон для нового рядка в grep? Новий рядок на початку, новий рядок в кінці. Не регулярний вираз. Щось на зразок \ n.
$. Це дещо обмежено, але корисно в простих випадках.
Відповіді:
grep візерунки узгоджуються з окремими рядками, тому немає можливості, щоб зразок відповідав новому рядку, знайденому у введенні.
Однак ви можете знайти такі порожні рядки:
grep '^$' file
grep '^[[:space:]]*$' file # include white spaces
спробуйте pcregrepзамість звичайного grep:
pcregrep -M "pattern1.*\n.*pattern2" filename
-Mопція дозволяє їй відповідати по декількох лініях, так що ви можете шукати для перенесення рядків , як \n.
Ви можете використовувати цей спосіб ...
grep -P '^\s$' file
-Pвикористовується для регулярних виразів Perl (розширення POSIX grep).\sвідповідати пробілам символів; якщо слідує за ним *, він також відповідає порожньому рядку.^відповідає початку рядка. $відповідає кінці рядка. -Pє розширенням GNU. Я чудово використовую його, коли ситуація вимагає цього (як правило, шукати / дивитися позаду), але POSIX grep може це зробити просто за допомогою [[:space:]].
-P. GNU і так цілком стандартний. :)
brew install grepотримати GNU grep, який перевершує кілька способів. apple.stackexchange.com/questions/193288/…
Завдяки @jarno я знаю про опцію -z, і я з'ясував, що при використанні GNU grep з опцією -P можливий збір з\n . :)
Приклад:
grep -zoP 'foo\n\K.*'<<<$'foo\nbar'
Відбитки bar
Що стосується обхідного шляху (без використання непереносимого -P), ви можете тимчасово замінити символ нового рядка іншим і змінити його назад, наприклад:
grep -o "_foo_" <(paste -sd_ file) | tr -d '_'
В основному він шукає точну відповідність, _foo_де _означає \n(so __= \n\n). Вам не потрібно перекладати його назад tr '_' '\n', оскільки кожен зразок все одно буде надруковано в новому рядку, тому видалення _достатньо.
<(p paste -sd_ file )?
new line at the beginningє порожнім рядком іnew line at endзастосовується до кожного рядка у файлі. Чи можете ви опублікувати приклад?