【问题标题】:Sed copy pattern between range only once范围之间的 Sed 复制模式仅一次
【发布时间】:2016-07-20 20:42:18
【问题描述】:

我正在使用 sed 来编辑一些 sql 脚本。我想复制从第一个“CREATE”模式到第一个“ALTER”模式的所有行。我遇到的问题是 sed 复制每组 CREATE 和 ALTER 之间的所有行,而不是只复制第一次出现(不止一次)。

sed -n -e '/CREATE/,/ALTER/w createTables.sql' $filename

【问题讨论】:

  • 请参阅stackoverflow.com/questions/38467115/… 以获得有据可查的 Q 示例。使用可以由读者复制/粘贴的示例数据(以及所需的 VS 当前输出),它会更容易提供帮助.祝你好运。

标签: regex bash sed


【解决方案1】:

Perl 的救援:

perl -ne 'print if /CREATE/ .. /ALTER/ && close ARGV' -- "$filename" > createTables.sql

当 ALTER 匹配时,它会关闭输入,即不再读取。

【讨论】:

  • 谢谢。还不知道任何 perl,但似乎是时候学习一种脚本语言了。
【解决方案2】:

使用 sed

 sed -n '/CREATE/,/ALTER/{p;/ALTER/q}' file > createTables.sql

或者(注意换行符)

sed -n '/CREATE/,/ALTER/{w createTables.sql
/ALTER/q}' file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2018-11-26
    • 2019-01-03
    相关资源
    最近更新 更多