Как использовать grep для строки, содержащей пробелы и разрывы строк

find . -type d -name nfs -exec mountpoint {} \; | grep not

проверит все папки с именем 'nfs', если они смонтированы

0
25.08.2018, 21:36
2 ответа

grepработает со строками, поэтому "вы не можете этого сделать" ; но, когда мне нужно сделать что-то подобное на bash, а я не хочу / не могу использовать perlили подобное (или, честно, я просто хочу использоватьgrep)Я делаю что-то вроде этого:

tr '\n' '\a' < <filename> | 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

1
28.01.2020, 04:23

Попробуйте это:

sed -e '1h;2,$H;$!d;g' -re 's/(.*)(H\w+\n)(.*w\n)(.*)/\2\3/' test.txt

С файлом test.txt, содержащим:

Something 
Hello
I
am
here right now
Something else

Проверено с помощью sed (GNU sed) 4.4. Вы можете установить GNU sed на macOS через Homebrew sed по умолчанию в macOS — BSD sed, некоторые параметры немного отличаются.

Ура,

0
28.01.2020, 04:23

Теги

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