Sed删除/替换双括号

山姆

我有一个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。但如果有多行,我需要这个..

我该怎么做才能改善这种模式?

日深

为避免输入文件名引起的问题,请使用 grep -rlZ 'regex' | xargs -0 <command ...>


如果括号内没有内容)),则可以使用此内容

grep -rlZ 'print((' | xargs -0 perl -i -0777 -pe 's/print\(\((.*?)\)\)/print($1)/sg'
  • -0777 将整个文件内容作为单个字符串处理,因此该解决方案不适用于无法满足内存要求的大文件
  • .*?非贪婪匹配
  • s修饰符允许匹配\n,以及对.

使用-ioption时,您可以指定备份后缀(ex:)-i.bkp或前缀(ex:)-i'bkp.*'甚至是备份目录(ex:-i'bkp_dir/*')-这些有助于保留原始副本以备将来使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章