Sed REMOVE / REPLACE 双括号
Sed REMOVE / REPLACE double parentheses
我有一个 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()/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()/sg'
-0777
将整个文件内容作为单个字符串,因此此解决方案不适用于无法满足内存要求的大文件
.*?
是 non-greedy matching
s
修饰符允许匹配 \n
以及 .
使用-i
选项时,您可以指定备份后缀(例如:-i.bkp
)或前缀(例如:-i'bkp.*'
)甚至备份目录(例如:-i'bkp_dir/*'
) - 这些有助于保存原始副本以供进一步使用
我有一个 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()/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()/sg'
-0777
将整个文件内容作为单个字符串,因此此解决方案不适用于无法满足内存要求的大文件.*?
是 non-greedy matchings
修饰符允许匹配\n
以及.
使用-i
选项时,您可以指定备份后缀(例如:-i.bkp
)或前缀(例如:-i'bkp.*'
)甚至备份目录(例如:-i'bkp_dir/*'
) - 这些有助于保存原始副本以供进一步使用