【问题标题】:replace strings no matter lowercase or uppercase using sed command [duplicate]使用 sed 命令替换字符串,无论是小写还是大写 [重复]
【发布时间】:2017-01-16 09:04:12
【问题描述】:

我使用以下命令替换文本中的字符串:

    grep -rl "abc" A.txt | xargs sed -i 's/abc/efg/g'.

但我也想用efg 替换Abc。以下命令似乎不起作用。

    grep -irl "abc" A.txt | xargs sed -i 's/abc/efg/g'

使用-i 进行grep 是为了查找不区分大小写的行,但是在随后的sed 命令中,它不会承认Abc

那么,我的问题是如何sed 来替换不区分大小写的文本?

【问题讨论】:

    标签: bash awk sed grep


    【解决方案1】:
    awk 'BEGIN{IGNORECASE=1} {gsub(/abc/,"efg")}1' A.txt > a.tmp && mv a.tmp A.txt
    

    例子:

     echo -e "abc\nABC\nhey abc" |awk 'BEGIN{IGNORECASE=1} {gsub(/abc/,"efg")}1'
    efg
    efg
    hey efg
    

    【讨论】:

    • 您好,感谢您的回答!就我而言,有很多字符串要替换。我认为这种方法可能会生成许多临时文件。例如,我需要执行很多这样的命令:find . -name "*.tex" | xargs grep -irl "tu2015futher" | xargs sed -i 's/tu2015futher/tu\_futher\_2015/g'。并且有很多类似tu2015futher的字符串可以替换成其他对应的字符串。
    【解决方案2】:

    将“I”大写。

    grep -irl "abc" do.py | xargs sed -i 's/abc/efg/gI'
    

    或者,使用另一个像这样的正则表达式

    grep -irl "abc" do.py | xargs sed -i 's/[Aa]bc/efg/g'
    

    【讨论】:

    • 您好,感谢您的回答!在帖子中,我使用abcefg 为例。就我而言,还有许多其他字符串,因此,这种方法可能效率不高。
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2020-10-21
    • 1970-01-01
    相关资源
    最近更新 更多