【问题标题】:Replace string with pattern keeping the string intact用保持字符串完整的模式替换字符串
【发布时间】:2018-05-14 21:10:25
【问题描述】:

将用 sed 或 awk 替换字符串,其中它标识如下所述的模式

示例:查找以“XX”开头并以“XX”结尾的单词,并在“XX”和“}”开头用“${hf:”连接替换该单词" 在 "XX" 的末尾 输入

CREATE TABLE XX_DB_XX.test_XX_YYYYMMDD_XX
AS
SELECT id
FROM XX_R_DB_XX.usr_XX_YYYYMMDD_XX
WHERE year              = XX_YYYY_XX
   AND month       = XX_MM_XX
   AND day         = XX_DD_XX;

输出

CREATE TABLE ${hf:XX_DB_XX}.test_${hf:XX_YYYYMMDD_XX}
AS
SELECT id
FROM ${hf:XX_R_DB_XX}.usr_${hf:XX_YYYYMMDD_XX}
WHERE year              = ${hf:XX_YYYY_XX}
   AND month       = ${hf:XX_MM_XX}
   AND day         = ${hf:XX_DD_XX};

尝试替换模式匹配,但问题是,在输出中我想将 $A 替换为输入文件中可用的子字符串“XX_(*)_XX”。

 cat test.hql | gawk '{ print gensub(/XX_+[A-Z,_]+_XX/, "${hiveconf:$A}", 1) 
}' |  gawk '{ print gensub(/XX_+[A-Z]+_XX/, "${hiveconf:$A}", 1) }'

输出:-> 我收到的需要更新 w.r.t 可用的字符串,那么如何做到这一点:

CREATE TABLE ${hiveconf:$A}.test_${hiveconf:$A}
AS
SELECT id
FROM ${hiveconf:$A}.usr_${hiveconf:$A}
WHERE year              = ${hiveconf:$A}
AND month       = ${hiveconf:$A}
AND day         = ${hiveconf:$A};

【问题讨论】:

  • 这是对您想要为您(免费)编写的代码的描述,而不是问题。请展示您自己尝试过的内容、您的结果以及它与所需输出的不同之处。理想情况下,就让你陷入困境的编程细节提出一个实际问题。
  • @Sampat,很高兴在您的帖子中添加您的努力,因为我们都在这里学习,继续学习并继续分享欢呼:)
  • @RavinderSingh13 抱歉忘记添加我最后完成的试验,已编辑问题并添加了问题
  • @RavinderSingh13 我们如何从上面给定的“OUTPUT”文件到“INPUT”文件进行上述字符串替换的反向操作。

标签: shell awk sed


【解决方案1】:

关注awk 可能对您有所帮助。

awk '{gsub(/XX_[a-zA-Z]+_XX/,"${hf:&}")} 1'   Input_file

【讨论】:

    【解决方案2】:

    这就是sed 存在的目的,

    sed 's/XX[[:alnum:]_]*XX/${hf:&}/g' file
    

    [[:alnum:]_] 代表字母数字或下划线。附加* 表示正则表达式中的零次或多次。

    【讨论】:

      【解决方案3】:

      或者你可以这样做

      sed 's/\(XX[^'XX']*XX\)/${hf:\1}/g'
      

      如果 XX 之间也可能存在非字母数字字符。

      首先匹配一个XX,然后等待找到一个XX。

      【讨论】:

        猜你喜欢
        • 2014-10-28
        • 2020-04-05
        • 2012-09-01
        • 1970-01-01
        • 2014-12-17
        • 2019-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多