我有一个文本文件,其中随机出现了很多字符串@STRING_A,我有兴趣编写一个仅删除其中一些字符串的简短脚本。特别是扫描文件的文件,一旦找到以该字符串开头的行,例如
@STRING_A
然后检查向后 3 行是否有另一行以相同的字符串开头,例如
@STRING_A
@STRING_A
如果发生,则向后删除 3 行。我在考虑 bash,但我不知道如何用它“倒退”。所以我确信这对于 bash 是不可能的。我也考虑过 python,但是我应该将所有信息存储在内存中以便倒退,然后对于长文件来说这是不可行的。
你怎么看?是否可以在 bash 或 python 中完成?
谢谢
最佳答案
有趣的是,在所有这些时间之后,还没有人给出实际措辞的问题解决方案(正如@John Machin 在评论中指出的那样)——只删除前导标记(如果后面跟着另一个这样的标记 3 行),不是包含它的整行。当然,这并不难——这是 @truppo 的有趣解决方案所需要的一个小模组,例如:
from itertools import izip, chain
f = "foo.txt"
for third, line in izip(chain(" ", open(f)), open(f)):
if third.startswith("@STRING_A") and line.startswith("@STRING_A"):
line = line[len("@STRING_A"):]
print line,
当然,在现实生活中,人们会使用 iterator.tee
而不是读取文件两次,将此代码放在一个函数中,而不是无休止地重复标记常量,&c;-)。
关于python - Bash 或 Python 倒退?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1012490/