在我的子流程中,我想从 txt 文件的每一行中删除最后 4 个字符。但是,线条的长度各不相同。我看过很多页面,包括如何使用 sed 剃掉最后一个字符?但似乎没有什么是正确的。我有大约 100 行,前 38 行没有正确删除前 4 个字符。一个看似随机的数字被删除。在第一行之后,之后的所有行都有我预期的输出。如何?现在我有:
subprocess.run(['sed', 's/.{4}$//', 'infile.txt'])
文件末尾始终有四个无用字符 -/pid:
3726-weinberg/pid
11717-christopher/pid
11138-span/pid
.
.
.
2932-smith/pid
.
.
.
问题是输出是:
3726-w
11717-chri
111
.
.
.
2932-smith //line 39! all good now
.
.
.
但我期望:
3726-weinberg
11717-christopher
11138-span
.
.
.
2932-smith //line 39! all good now
.
.
.
Sed 不一定是解决方案。如果截断或剪切或任何其他选项也有效,请随时告诉我。我选择 sed 是因为我在程序的另一部分使用它。
也许在python中做到这一点更容易。
with open('infile.txt', 'r') as f:
lines = f.read()
out = [line[:-4] for line in lines.split('n')]
with open('infile.txt', 'w') as f:
f.write('n'.join(out))
是因为您的行只有三个字符或更短吗?当前子流程仅在行长度至少为四个字符时删除最后四个字符。如果这是问题所在,以下小更改将起作用(这似乎适用于我测试过的输入(:
subprocess.run(['sed', 's/.{1,4}$//', 'infile.txt'])
这个链接可能是很糟糕的。删除每行的最后两个字符。
sed 's/....$//' filename
这里每个点'.代表字符,$从行尾读取字符