колотите grep новую строку

Это действительно зависит от того, что точно Вы пытаетесь выполнить.

Система. ComponentModel. Материал TypeDescriptor может использоваться для добавления атрибутов к типам, свойствам и экземплярам объектов, и он имеет ограничение, что необходимо использовать его для получения тех свойств также. Если Вы пишете код, который использует те атрибуты, и можно жить в рамках тех ограничений, то я определенно предложил бы его.

, Насколько я знаю, управление PropertyGrid и поверхность для дизайна Visual Studio являются единственными вещами в BCL, которые используют материал TypeDescriptor. На самом деле это - то, как они делают приблизительно половину вещей, которые они действительно должны сделать.

11
задан Community 23 May 2017 в 10:29
поделиться

7 ответов

Вместо grep вы можете использовать pcregrep , который поддерживает многострочные шаблоны

pcregrep -M 'second\nthird' file

-M позволяет шаблону соответствовать более чем одному линия.

20
ответ дан 3 December 2019 в 01:53
поделиться

Аннотация вашего вопроса "bash grep newline" подразумевает, что вы хотите сопоставить вторую \ nthird последовательность символов - то есть что-то, содержащее новую строку внутри нее.

Так как grep работает с «строками», а эти две разные строки, вы не сможете сопоставить его таким образом.

Итак, я бы разделил его на несколько задач:

  1. вы сопоставляете строку который содержит "second" и выводит строку, которая соответствует, и последующую строку:

     grep -A 1 "second" testfile
    
  2. вы переводите все остальные символы новой строки в последовательность, которая гарантированно не встречается во вводе. Я думаю, что самый простой способ сделать это - использовать perl:

     perl -npe '$ x = 1- $ x; s / \ n / ## UnUsedSequence ## / if $ x; '
    
  3. вы вводите grep в этих строках, на этот раз ищите строку ## UnUsedSequence ## third :

     grep "## UnUsedSequence ## third"
    
  4. вы разворачиваете неиспользуемые последовательности обратно в символы новой строки, sed может быть самым простым:

     sed -e 's / ## UnUsedSequence ## / \ n'
    

Таким образом, результирующая команда конвейера для выполнения того, что вы хотите, будет выглядеть так:

grep -A 1 "second" testfile | perl -npe '$x=1-$x; s/\n/##UnUsedSequence##/ if $x;' | grep "##UnUsedSequence##third" | sed -e 's/##UnUsedSequence##/\n/'

Не самая элегантная на сегодняшний день, но должна работать. Хотя мне любопытно узнать о подходах получше - они должны быть.

8
ответ дан 3 December 2019 в 01:53
поделиться

Я не думаю, что grep - это способ сделать это.

Если вы просто хотите удалить первую строку из любого файла (чтобы обобщить ваш вопрос ), Я бы использовал вместо него sed .

sed '1d' INPUT_FILE_NAME

Это отправит содержимое файла на стандартный вывод с удаленной первой строкой.

Затем вы можете перенаправить стандартный вывод в другой файл для захвата результаты.

sed '1d' INPUT_FILE_NAME > OUTPUT_FILE_NAME

Это должно сработать.

Если вам нужно использовать grep , и вы просто не хотите отображать на нем строку с сначала , попробуйте следующее:

grep -v first INPUT_FILE_NAME 

Передавая переключатель -v , вы сообщаете grep показать вам все , кроме выражения, которое вы передаете. Фактически покажите мне все, кроме строк с первым в них.

Однако

3
ответ дан 3 December 2019 в 01:53
поделиться

Я не совсем понимаю, что вы хотите сопоставить. Я бы не стал использовать grep, но одно из следующего:

tail -2 file         # to get last two lines
head -n +2 file      # to get all but first line
sed -e '2,3p;d' file # to get lines from second to third

(не уверен, насколько это стандартно, точно работает в инструментах GNU)

2
ответ дан 3 December 2019 в 01:53
поделиться

Значит, вам просто не нужна строка, содержащая «первый»? -v инвертирует результаты grep.

$ echo -e "first\nsecond\nthird\n" | grep -v first
second
third
1
ответ дан 3 December 2019 в 01:53
поделиться

Строка? Или строки?

Попробуйте

grep -E -e '(second|third)' filename

Изменить: grep ориентирован на строку. вам придется использовать Perl, sed или awk для выполнения сопоставления шаблонов между строками.

BTW -E сообщает grep, что регулярное выражение является расширенным RE.

1
ответ дан 3 December 2019 в 01:53
поделиться
grep -E '(second|third)' /path/to/file
egrep -w 'second|third' /path/to/file
0
ответ дан 3 December 2019 в 01:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: