【问题标题】:Replace carriage returns between [[ .... ]]替换 [[ .... ]] 之间的回车
【发布时间】:2017-06-15 20:55:52
【问题描述】:

我有一个看起来像这样的文件:

[[ this is a test
this is a line
this is another line]]

我希望它看起来像:

[[this is a test~this is a line~this is another line]]

如果我使用单个 [ 它可以工作.. with:

perl -ane "s/\R/~/ if (/\[/ .. /\]/) && !/]/;print $_ unless $_ =~ /~\s*\^s*$/;" < filename.txt

如何修改它以使用双 [[ ]] 我不得不使用 double 作为分隔符,因为我了解到一些包含单 ] 的文本在不需要时将其关闭。我已经确认文件中不存在双 [[ 。

【问题讨论】:

  • 你有什么尝试吗? /\[\[/ .. /\]\]/ 听起来不太难。
  • 非常感谢!我是这个新手!效果很好!
  • 我能再问你一个问题吗...现在如果我想清除此文件中的所有 [[ ]] .. 我该怎么做?
  • 您可以通过替换来删除它们。在print 之前,只需执行s/\[\[|\]\]/; 即可从当前行中删除一对左括号或右括号。您可以通过使用... 而不是.. 以及所有$_=~ 顺便说一句来摆脱&amp;&amp; !/]/
  • 嗨,Jason,欢迎来到 Stack Overflow。如果您在使用正则表达式和正则表达式运算符时遇到问题,我建议您阅读official Perl regex tutorial

标签: regex perl text sed


【解决方案1】:

您需要在触发器运算符.. 的模式中包含两个括号。

/\[\[/ .. /\]\]/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2011-08-21
    • 2020-02-05
    • 2015-12-10
    • 2015-01-09
    • 2016-07-12
    相关资源
    最近更新 更多