Как реализовать команду шаблонов диапазонов sed на скрипте groovy - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь реализовать команду шаблонов диапазонов sed в скрипте groovy.

Вот как я пытаюсь реализовать команду в скрипте 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 unmatched "'" или sed unknown unknown.

В конечном итоге мне нужно как-то сказать следующее в groovy script:

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

Cкто-то, пожалуйста, помогите решить эту проблему, так как мне потребовалось два дня, чтобы разобраться с этим.

Спасибо!

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете использовать что-то в таком духе:

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 }
}

Вы можете попробовать это здесь .

Обратите внимание, что у меня мало опыта работы с Groovy,Я уверен, что мне не хватает множества Groovyism, которые сделали бы код короче / более заметным для кого-то с большим опытом Groovy.Но это работает, и я не думаю, что вы можете сделать это намного эффективнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...