如何在Groovy脚本上实现sed范围模式命令

时间:2018-09-22 15:48:25

标签: groovy sed

我正在努力在groovy脚本上实现sed range pattern命令。

这是我尝试在groovy脚本中实现命令的方式:

 def range = sed -n -e /Word A/,/Word D/ p
 def result = cat sample.txt | range.execute()

这是sample.txt文件的内容:

Word A
Word B
Word C
Word D
Word E
Word F

这是我想要的输出:

Word A
Word B
Word C
Word D

现在,当我运行它时返回给我的错误是:

sed: unmatched '/'

我相信我收到此错误的原因是因为在实际的sed命令中,我需要以某种方式对范围模式进行分组,因为我觉得并且实际上我已经对其进行了测试,sed命令仅适用于第一个范围,即“ WORD A”,然后读取下一个“ /”作为文字字符,而不是封装了下一个模式(WORD D)的字符。

我尝试使用单引号和双引号,但是在运行脚本时,出现以下错误:sed不匹配的“'”或sed未知命令。

最终,我需要以常规脚本以某种方式说出以下内容:

sed -n -e (/Word A/,/Word D/ p)

有人花了我两天的时间才能解决这个问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以按照以下方式使用:

def isBlockStart =  { "Word A".equals(it) }
def isBlockEnd = { "Word D".equals(it) }

def isInsideBlock = false;    

inputText.eachLine {
    if (!isInsideBlock && isBlockStart(it)) { isInsideBlock = true }
    if (isInsideBlock) println(it)
    if (isInsideBlock && isBlockEnd(it)) { isInsideBlock = false }
}

您可以try it here

请注意,我没有使用Groovy的丰富经验,我敢肯定我错过了许多常规知识,这会使代码变得更短/对于具有更多Groovy经验的人来说更容易理解。但这有效,而且我认为您无法做得更有效率。