在Python3中执行链式bash命令,包括多个管道和grep

时间:2019-03-15 07:07:52

标签: python python-3.x shell grep

我必须在包含多个pip和grep命令的python脚本中使用以下bash命令。

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

我尝试使用子流程模块执行相同的操作,但没有成功。

有人可以帮我在Python3脚本中运行上述命令吗?

我必须从文件file.txt中获取以下输出。

 Tom
 Jack

file.txt包含:

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

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

实际上,我想知道如何使用Python运行以下bash命令。

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

2 个答案:

答案 0 :(得分:1)

无需使用子进程库或任何其他与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()

答案 1 :(得分:0)

如果您不尝试解析json文件或其他任何使用解析器将是最佳方法的结构化文件,只需将命令更改为:

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

您根本不需要任何管道。

这将为您提供输出

Tom
Jack

说明:

  • -P激活perl正则表达式以进行超前查找/向后查找
  • -o仅输出匹配的字符串而不是整行
  • 使用的正则表达式:(?<="name":[[:blank:]]").*(?=",)
    • (?<="name":[[:blank:]]")令人反感:强制约束"name":,后跟一个空白字符,然后再用双引号"命名,后跟一个双引号",这是通过{提取的{1}}积极向前看

演示https://regex101.com/r/JvLCkO/1