【问题标题】:escaping single quotes in sed在 sed 中转义单引号
【发布时间】:2017-03-22 18:11:42
【问题描述】:

在文件test.py 中显示:

#!/usr/bin/env python

import os
import glob

for f in glob.glob('*.txt'):
    print f

...我想以编程方式替换:

glob.glob('*.txt')

...与:

glob.glob('*.txt')+glob.glob('*.dat') 使用 sed

我试过了:

sed -i "s,glob.glob('*.txt'),glob.glob('*.txt')+glob.glob('*.dat'),g" test.py

...但是这不会替换字符串。我有一种预感,这与在字符串中使用单引号来替换和/或解释 shell 本身 (bash) 中的各种引号有关。出了什么问题?

【问题讨论】:

  • 如果您有多个地方需要进行替换(如果没有,为什么不直接手动进行呢?),您应该在调用 glob 周围定义一个包装函数,所以只有一个地方可以改变。

标签: bash sed


【解决方案1】:

您需要在搜索模式中转义所有特殊的正则表达式元字符,例如 .*

您可以在sed 命令中使用双引号。也可以使用& 代替,以避免再次重复匹配的文本。

sed "s/glob\.glob('\*\.txt')/&+glob.glob('*.dat')/" test.py

#!/usr/bin/env python

import os
import glob

for f in glob.glob('*.txt')+glob.glob('*.dat'):
    print f

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2017-09-13
    • 2020-01-31
    • 2017-08-05
    • 2011-11-22
    • 2013-02-24
    相关资源
    最近更新 更多