我正在努力在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)
有人花了我两天的时间才能解决这个问题。
谢谢!
答案 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经验的人来说更容易理解。但这有效,而且我认为您无法做得更有效率。