Як надати шаблон для нового рядка в 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
застосовується до кожного рядка у файлі. Чи можете ви опублікувати приклад?