Вы не можете split ()
вашу командную строку, поскольку она содержит символы, которые должны обрабатываться оболочкой, например ~
и |
. Используйте версию:
process = subprocess.Popen(my_command, stdout=subprocess.PIPE, shell=True)
grep
использует символы новой строки как разделители разных шаблонов. Но вы можете сохранить шаблон в переменной, а затем удалить пробел перед передачей его в grep
:
$ ws=$' \t\n'
$ pat=$'a b\nc'
$ echo abcd | grep "${pat//[$'\n\t ']}"
abcd
(не проверял ничего более сложного.)
Даже с -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.