【问题标题】:find and replace查找和替换
【发布时间】:2010-11-16 08:22:16
【问题描述】:

查找:

regexp1 **sometext** regexp2

替换为:

newregexp1 **sometext** newregexp2

这里,我不想修改**sometext**
也就是说,如果我在一个文件中有以下几行:

Hello somebody! Have a good day.
Hello somebodyelse! Have a good day.

我希望输出是:

Bye somebody! Good night.
Bye somebodyelse! Good night.

我的正则表达式搜索将采用以下形式:

Hello .*! Have a good day.

如何使用 \1 关键字和 sed(或任何 linux 工具)来完成此操作。
请帮助我了解实际的命令语法。

另外,如果您有办法在 notepad++ 中执行此操作,请告诉我。

感谢您的帮助!

【问题讨论】:

    标签: regex shell sed


    【解决方案1】:

    试试:

    sed 's/Hello \(.*\)! Have a good day./Bye \1! Good night./' MyInputFile > MyOutputFile
    

    【讨论】:

    • 请注意,您可以使用 sed -i 's/pat1/pat2/' 在文件上执行替换 - 不过最好先检查您的替换是否正确(可能输出到标准输出)。
    【解决方案2】:
    echo "Hello somebody! Have a good day" | sed -e 's/Hello \(.*\) Have a good day/Bye \1 Good night./'
    

    但我感觉对正则表达式的工作方式存在一些误解,因为您在源文本中使用了“regexp1”。正则表达式是描述字符串的模式,而不是字符串本身。

    【讨论】:

      猜你喜欢
      • 2014-09-01
      • 1970-01-01
      • 2014-07-07
      • 2012-02-12
      • 2018-10-06
      • 2011-05-30
      相关资源
      最近更新 更多