【问题标题】:How to delete all lines containing the leading // or /如何删除包含前导 // 或 / 的所有行
【发布时间】:2018-04-29 11:42:04
【问题描述】:

我有一个文件 trial.txt 包含

This can stay
// but this 
/ and this
// must go
I will be happy

删除前导#我在其他情况下使用的

os.system(" sed '/^#.*/d' trial.txt > start.txt ")

所以要删除 // 我用过

os.system(" sed '/^//.*/d' trial.txt > start.txt ")

但这会报错

sed: 1: "/^//.*/d": invalid command code /

有什么建议吗?最好使用 Python 还是 Linux?

【问题讨论】:

  • 您可以使用'^/.*'。得到那些应该去的人

标签: python split character


【解决方案1】:

当然你必须转义斜线,不要用...另一个斜线转义斜线(并使用原始字符串前缀)

os.system("sed r'/^\/.*/d' trial.txt > start.txt")

但由于许多原因,这不是很 Python:

  • os.systemsubprocess 弃用
  • 您的命令行依赖于 shell,如果某些字段变为变量,那么很容易受到攻击
  • 使用sed,而 Python 本身可以做到这一点是矫枉过正(也不是可移植的,例如在 Windows 上必须单独安装 sed,并且单引号也不会在那里工作......)

除此之外不会过滤掉单斜线。

我会在每一行的开头测试 / 并使用 writelines 和生成器理解:

with open("trial.txt") as fr, open("start.txt","w") as fw:
    fw.writelines(line for line in fr if not line.startswith("/"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 2023-04-02
    相关资源
    最近更新 更多