【问题标题】:How can I remove multiline Comment From a Code using Sed and Regex如何使用 Sed 和 Regex 从代码中删除多行注释
【发布时间】:2018-11-28 20:55:32
【问题描述】:

我正在尝试使用sed 从文件中删除多行注释和单行注释。我的文件看起来像:

<#
Comment Block Data
Comment Block Data
#>
If (a= Example)
#
Comment Data
#
If (b= Example)

我想要以下结果。

If (a= Example)
If (b= Example)

我已成功删除 # 个 cmets,但我无法从文件中删除 个 cmets。有没有办法使用正则表达式一起删除所有内容?

这是一个 PowerShell 脚本。

要删除 '#' 行,我使用了以下正则表达式:"/^[[:blank:]]*#/d;s/#.*//"

【问题讨论】:

  • 抱歉,这不是 StackOverflow 的工作方式。 “我想做 X,请给我提示和/或示例代码”形式的问题被认为是题外话。你提到你成功地删除了# cmets 但不是其他的,你是怎么做到的。您可以edit您的问题并将此信息添加到问题中吗?
  • 您的文本中是否包含&lt;#\n&lt;#\n#&gt;,即在单个多行注释中多次打开&lt;#?如果是这样,那么正则表达式可能不是适合这项工作的工具。
  • 另外,什么是单行注释?这是什么语言?
  • 已经回答,阅读并改编这封邮件stackoverflow.com/questions/53432910/…

标签: regex awk sed


【解决方案1】:

此 sed oneliner 适用于您给出的示例:

 sed '/^<#/,/^#>/d;/^#$/,/^#$/d' file

嗯,可能有很多可能性可以打破上面的界限,比如没有配对&lt;# or # 等等。因此,您应该在执行该行后仔细检查您的源文件。

您可以添加-i (gnu sed) 来保存文件中的更改。

【讨论】:

  • 以上单行不工作。你能不能只给我一个多行注释的解决方案? 是 PowerShell 脚本。
  • @user2670674 此 sed oneliner 适用于您提供的示例
  • @MichaWiedenmann sed 支持/pat1/,/pat2/ 作为范围地址
  • @MichaWiedenmann 是的,它们是一样的。你什么都想念。模式(正则表达式)是相同的,但这并不意味着它们将指示相同的地址。 /^#$/d 也不正确。如果您查看 OP 的示例和预期输出,您会发现 Comment Data 行位于两条 # 行之间。
猜你喜欢
  • 2013-12-01
  • 2017-02-16
  • 2023-03-18
  • 2015-03-28
  • 1970-01-01
  • 2012-02-11
  • 2011-05-23
  • 2015-01-09
  • 1970-01-01
相关资源
最近更新 更多