Для упрощения, давайте рассмотрим этот файл:
$ cat file
before
/id D4333F9F 1234
another line
last line in file
Проблема, с которой вы сталкиваетесь, не ^M
. Это то, что стандарт grep
обрабатывает только одну строку за раз.
Использование sed
Чтобы получить все от строки, содержащей /id D4333F9F
, до конца файла, есть несколько стандартных инструментов, которые вы можете использовать. Например, попробуйте sed
:
$ sed -n '/\/id D4333F9F/,$ p' file
/id D4333F9F 1234
another line
last line in file
Здесь /\/id D4333F9F/,$ p
указывает sed печатать любые строки, начиная со строки, совпадающей с /id D4333F9F
и заканчивая последней строкой ($
).
Использование awk
Попробуйте awk
:
$ awk '/\/id D4333F9F/{f=1} f' file
/id D4333F9F 1234
another line
last line in file
Здесь /\/id D4333F9F/{f=1}
указывает awk установить переменную f
равной единице, когда найдена первая строка, соответствующая /id D4333F9F
. Последний f
является сокращением, которое указывает awk на печать, если f
истинно (что означает непустое или ненулевое значение).
Использование grep с расширениями GNU
Наконец, если ваш grep
имеет расширение -P
(для этого требуется GNU grep), попробуйте:
$ grep -ozP '(?s)/id D4333F9F.*' file
/id D4333F9F 1234
another line
last line in file
Этот grep-код подробно объясняется здесь .