【问题标题】:Replace all the words between starting and end pattern using sed command使用 sed 命令替换开始模式和结束模式之间的所有单词
【发布时间】:2022-01-26 15:43:17
【问题描述】:

假设我有一个包含以下内容的文件:

Create table table_new as (
Select colA1,colA2,colA3
from tableA,
(Select col1 from tableB)

现在我想用空格替换 Create 和 from(第一次出现)单词之间的所有内容。即我想要输出

tableA,
(Select col1 from tableB)

我尝试了以下方法。

  1. 用#替换换行符(随机选择),这样我就可以使用sed命令了。

  2. 试过命令sed -r 's/Create[^from].*from//ig' filename > new_file_name

对我来说,上面的命令将 Create 替换为第二次出现的 from,我仍然使用“tableB)”

谁能帮助我如何才能替换到第一个单词?如果您也能解释答案,那将非常有帮助。

【问题讨论】:

    标签: unix sed


    【解决方案1】:

    不确定这是不是你要问的。

    tr '\n' '#' < file.txt 将整个文件分成一行,以便sed 可以完成这项工作。

    ^Create.*\?from 匹配从开头到第一个“来自”之后的一个空格的所有内容。

    \(.*\?from\) 捕获“tableA, (Select col1 from”。

    \1指的是上面的捕获组。

    tr '\n' '#' < file.txt | sed 's/^Create.*from \(.*from\)/\1/g; s/#/\n/g'
    

    所以第一个sed 操作应该是这样的:

    sed 's/Create table table_new as ( Select colA1,colA2,colA3 from tableA, (Select col1 from/tableA, (Select col1 from/g'
    

    我认为这个解决方案不是很优雅,希望有人能想出一个更好的主意:(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-30
      • 2013-10-11
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多