我正在尝试通过 python 使用 shell 命令匹配多行模式。
我可以使用 shell 命令进行匹配,但我无法通过 Python subprocess.call 或 os.system 模块传递此命令。
我的文件看起来像这样:
(CELL
(CELLTYPE "NAND_2X1")
(INSTANCE U2)
(DELAY
(ABSOLUTE
(IOPATH A1 ZN (0.02700::0.02700) (0.01012::0.01012))
(IOPATH A2 ZN (0.02944::0.02944) (0.00930::0.00930))
)
)
)
不,我试图提取这个:
(INSTANCE U2)
(DELAY
(ABSOLUTE
(IOPATH A1 ZN (0.02700::0.02700) (0.01012::0.01012))
(IOPATH A2 ZN (0.02944::0.02944) (0.00930::0.00930))
)
)
使用这个正则表达式:
pcregrep -M -n 'INSTANCE U2((?!^\)).*\n)+' sdf/c1_syn_buf2.sdf
其中 U2 是搜索字符串,sdf/c1_syn_buf2.sdf 是文件名
在 Python 中,我定义了一个函数,我将向其传递搜索字符串和文件名,因为我必须多次执行此操作。
我无法使用以下命令成功地将其作为 shell 命令执行:
>>>b = subprocess.call(['pcregrep','-M','-n','INSTANCE '+arg, '\)((?!^\).*\n)+ '+file ])
pcregrep: Failed to open \)((?!^\).*
)+ /home/sanjay/thesis/code/sdf/c7552_syn_buf0.sdf: No such file or directory
当我实际输入参数(在本例中为 U2)名称和文件名时,我能够获得所需的输出。
编辑 如果 pcregrep 不够友好,这里是 awk 命令:
awk '/INSTANCE U2/,/^)\n?/' sdf/c1_syn_buf2.sdf
返回相同。
有人可以帮我吗?