sed вызывается с subprocess.check_output возвращает \ x01 \ n

1

У меня есть файл данных, который я хочу запустить sed. Упрощенная версия файла test.data приведена ниже

test.data
=============
some text SEARCH_URL = "google.com" some ending text

Я хочу извлечь SEARCH_URL из этого без кавычек. После команды sed хорошо работает на подсказке bash

sed -n 's/^.*SEARCH_URL.*\"\(.*\)\".*/\1/p' ./test.data

Output
=============
google.com

Но команда не работает при вызове из скрипта python с check_output. Единственный вывод, который я получаю, - загадочная строка "\ x01\n"

geturl.py
=============
import subprocess
import re

#sed -n 's/^.*SEARCH_URL.*\"\(.*\)\".*/\1/p' test.data #works in bash

res = subprocess.check_output(["sed", "-n", 's/^.*SEARCH_URL.*\"\(.*\)\".*/\1/p', "test.data"]) print("Search URL is : ", res)

Это выводит результат как

python geturl.py
('Search URL is : ', '\x01\n')

Что мне не хватает?

Теги:

1 ответ

1
Лучший ответ

Вы должны использовать необработанную строку, когда вы планируете каждую обратную косую черту в строковом литерале, чтобы обозначить буквенную обратную косую черту; в противном случае \1 в вашей 's/^.*SEARCH_URL.*\"\(.*\)\".*/\1/p' будет интерпретироваться как символ порядкового номера 1, который равен '\x01,

Изменить:

res = subprocess.check_output(["sed", "-n", 's/^.*SEARCH_URL.*\"\(.*\)\".*/\1/p', "test.data"])

чтобы:

res = subprocess.check_output(["sed", "-n", r's/^.*SEARCH_URL.*\"\(.*\)\".*/\1/p', "test.data"])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню