【发布时间】:2018-10-18 04:06:17
【问题描述】:
我有一个 python 文件,其中有很多这样的双括号,我想用单括号替换。 有时打印会持续 2 行或更多。
print(('>> # some text some text some text and '
+ 'some more text'))
print(('>> # some text some text some text and '
+ 'some more text'))
print(('>> # some text some text some text and '
+ 'some more text'))
print(('>> # some text some text some text and '
+ 'some more text'))
print((something))
print((something))
print((something))
print((something))
print((something))
print((something))
我尝试了很多不同的方法来解决这个问题。我认为最简单的方法是使用 sed。我有这样的事情:
grep -rl 'print((' test.txt | xargs sed -i "N;s/print((\(.*\)))/print(\1)/g"
输出如下所示:
print('>> # some text some text some text and '
+ 'some more text')
print('>> # some text some text some text and '
+ 'some more text')
print(('>> # some text some text some text and '
+ 'some more text'))
print(('>> # some text some text some text and '
+ 'some more text'))
print(something)
print(something)
print(something)
print(something)
print(something)
print(something)
现在有些行可以工作,但有些行不行,我认为这是因为 N;但我需要这个,以防它有多行长..
我可以做些什么来改进这种模式?
【问题讨论】:
-
您可以将
sed -z 's/print(\(([^)]*)\))/print\1/g'用于足够小的输入文件。但如果括号内的内容包含)并假定输入文件不包含ASCII NUL 字符,这将失败... -
另外,为避免因输入文件名引起的问题,请使用
grep -rlZ 'regex' | xargs -0 sed ... -
perl -0777 -pe 's/print\(\((.*?)\)\)/print($1)/sg'可能比sed版本更好,因为))作为括号内内容的一部分可能比)更罕见 -
@Sundeep 有时是这样的:
print(( something, somethingelse() )) -
@Sundeep 我必须用这个作为目录,所以
test.txt将被替换为./
标签: python linux design-patterns sed parentheses