Выполнять команды цепочки bash, включая несколько каналов и grep в Python3 - PullRequest
2 голосов
/ 15 марта 2019

Мне нужно использовать приведенную ниже команду bash в скрипте Python, который включает в себя несколько команд pip и grep.

 grep name | cut -d':' -f2  | tr -d '"'| tr -d ','

Я пытался сделать то же самое с помощью модуля подпроцесса, но безуспешно.

Может ли кто-нибудь помочь мне выполнить указанную выше команду в скриптах Python3?

Мне необходимо получить приведенный ниже вывод из файла file.txt.

 Tom
 Jack

file.txt, содержащего:

"name": "Tom",
"Age": 10

"name": "Jack",
"Age": 15

На самом деле я хочу знать, как можно запустить приведенную ниже команду bash с использованием Python.

    cat file.txt | grep name | cut -d':' -f2 | tr -d '"'| tr -d ','

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Это работает без использования библиотеки подпроцессов или любой другой связанной с os cmd библиотеки, только Python.

my_file = open("./file.txt")
line = True
while line:
    line = my_file.readline()
    line_array = line.split()
    try:
        if line_array[0] == '"name":':
            print(line_array[1].replace('"', '').replace(',', ''))
    except IndexError:
        pass
my_file.close()
0 голосов
/ 15 марта 2019

Если вы не пытаетесь выполнить синтаксический анализ файла json или любого другого структурированного файла, для которого лучше всего использовать синтаксический анализатор, просто измените команду на:

grep -oP '(?<="name":[[:blank:]]").*(?=",)' file.txt

Вам вообще не нужна труба.

Это даст вам вывод :

Tom
Jack

Пояснения:

  • -P активировать регулярное выражение perl для lookahead / lookbehind
  • -o просто вывести соответствующую строку, а не всю строку
  • Используется регулярное выражение: (?<="name":[[:blank:]]").*(?=",)
    • (?<="name":[[:blank:]]") Позитивный вид сзади: принудительное ограничение "name":, за которым следует пустой символ, а затем еще одна двойная кавычка " имя, за которым следует двойная кавычка ", извлеченная с помощью (?=",) положительный прогноз

демо : https://regex101.com/r/JvLCkO/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...