grep - запись многострочного шаблона

Вы не можете split () вашу командную строку, поскольку она содержит символы, которые должны обрабатываться оболочкой, например ~ и | . Используйте версию:

process = subprocess.Popen(my_command, stdout=subprocess.PIPE, shell=True)
1
15.06.2017, 01:41
2 ответа

grep использует символы новой строки как разделители разных шаблонов. Но вы можете сохранить шаблон в переменной, а затем удалить пробел перед передачей его в grep:

$ ws=$' \t\n'
$ pat=$'a b\nc'
$ echo abcd | grep "${pat//[$'\n\t ']}"
abcd

(не проверял ничего более сложного.)

2
29.04.2021, 00:00

Даже с -P, который включает (?x:), вы не можете игнорировать символы новой строки. Для пробелов и табуляции это работает:

echo abab | grep -P $'(?x:a b a\tb)'

Но новая строка работает иначе:

echo ab | grep -P $'(?x:a\nb)'
grep: the -P option only supports a single pattern

По крайней мере, в GNU grep 2.16.

3
29.04.2021, 00:00

Теги

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