grep
работает со строками, поэтому "вы не можете этого сделать" ; но, когда мне нужно сделать что-то подобное на bash
, а я не хочу / не могу использовать perl
или подобное (или, честно, я просто хочу использоватьgrep
)Я делаю что-то вроде этого:
tr '\n' '\a' < | grep --only-matching Hello$'\a'I$'\a'am$'\a'here\ right\ now | tr '\a' '\n'
tr
переводит символы; здесь вы «переводите» новые строки в bell ascii char [шестнадцатеричный код \x07 или '\ a'] , затем обрабатываете это наgrep
(обратите внимание, что grep
видит длинную однострочную строку с символами bell ascii вместо новой строки символов ), а затем, возвращаясь к «нормальному», переводя bell ascii chars to newline .
нет необходимости использовать bell ascii char:вы можете использовать любой char, которого нет в вашем файле; в моем случае просто мне нравится число семь и, как правило, текстовый файл не содержит символов bell ascii
BTW :$'\a'
— этоBash ANSI -Цитата C