sed - 在不同行的模式之间替换多行字符串 [英] sed - replace multiline string between patterns in different lines

查看:115
本文介绍了sed - 在不同行的模式之间替换多行字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有几个 .sql 文件包含标记为/* */"的注释注释可以在同一行开始和结束,但主要是多行注释.

I have few .sql files that contain comments marked as '/* */' Comment can start and end at the same line, but mostly there is a multiline comment.

[更新] 示例:

    /*=======WHATEVER=======*/
    SELECT * FROM TABLE 
    WHERE
        /* PERIOD_DTE IN
                (SELECT MAX(PERIOD_DTE) 
                 FROM TABLE WHERE PERIOD_DTE < '1900-01-01')
                 AND FIELD1 = 100
                 AND FIELD2 IS NULL
        */
    FIELD3 IS NULL

是否可以使用 sed 函数将那种注释替换为空字符串?

Is it possible to use sed function for replace that kind of comment as an empty string?

推荐答案

这将适用于您的示例(使用 GNU sed):

This will do it for your example (with GNU sed):

sed 's_\*/_\n*/_' your_file | sed '/\/\*/,/\*\//d'

它的工作方式如下:

  • 在第一个命令中,我使用 _ 作为模式分隔符以避免需要转义 \ 字符.
  • 第一个命令将任何单行注释分成多行注释以便我们可以在第二个命令中处理一种情况.
  • 第二个命令删除所有匹配的行和行之间的所有内容模式 /**/
  • In the first command I'm using _ as a pattern delimiter to avoid needing to escape the \ characters.
  • The first command breaks any single line comment into a multiple line comment so that we can deal with one situation in the second command.
  • The second command deletes everything including and between lines matching the patterns /* and */

对于示例输入:

SELECT * FROM TABLE 
WHERE
    /* PERIOD_DTE IN
            (SELECT MAX(PERIOD_DTE) 
             FROM TABLE WHERE PERIOD_DTE < '1900-01-01')
             AND FIELD1 = 100
             AND FIELD2 IS NULL
    */
    /* SINGLE LINE COMMENT */
FIELD3 IS NULL

所以这两个步骤是:

sed 's_\*/_\n*/_' your_file

输出:

SELECT * FROM TABLE
WHERE
    /* PERIOD_DTE IN
            (SELECT MAX(PERIOD_DTE)
             FROM TABLE WHERE PERIOD_DTE < '1900-01-01')
             AND FIELD1 = 100
             AND FIELD2 IS NULL

*/
    /* SINGLE LINE COMMENT
*/
FIELD3 IS NULL

sed '/\/\*/,/\*\//d'

输出:

SELECT * FROM TABLE
WHERE
FIELD3 IS NULL

这篇关于sed - 在不同行的模式之间替换多行字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆