Использование команды grep в Groovy - PullRequest
0 голосов
/ 07 мая 2019

Как написать приведенную ниже оболочку в groovy

process_name = spin_user

if grep -i ${process_name} /tmp/output.log ; then 
  echo "Success" 
  grep -i ${process_name} output.log > final_output.log 
else 
  echo "failure" 
fi 

1 Ответ

0 голосов
/ 08 мая 2019

<< отредактировано в ответ на комментарий >>

1.Чистое решение Groovy

Если вы просто хотите реализовать функциональность вашего bash-скрипта в groovy, вы можете сделать что-то вроде этого:

def processName = 'spin_user'
def outLog      = new File('/tmp/output.log')
def finalLog    = new File('final_output.log')

def lines       = outLog.readLines()
def hasProcess  = { it.toLowerCase().contains(processName) }

if(lines.any(hasProcess)) { 
  println "Sucess"
  finalLog.text = lines.findAll(hasProcess).join('\n')
} else { 
  println "failure"
}

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

2.Process Management Solution

Если вы специально пытались использовать команду linux system grep изнутри groovy, вышеприведенное, естественно, вам не поможет.Следующий отличный код:

import java.util.concurrent.*

def processName = 'spin_user'
def outLog      = '/tmp/output.log'
def finalLog    = 'final_output.log'

def result = exec('grep', '-i', processName, outLog)
if (result) {
  println "success"
  new File(finalLog).text = result
} else { 
  println "failure"
}

String exec(String... args) {
  def out = new StringBuffer()
  def err = new StringBuffer()

  def process = args.toList().execute()

  process.consumeProcessOutput(out, err)
  process.waitForOrKill(5000)

  if (err) {
    println "ERROR:  executing ${args} returned ${process.exitValue()}"
    println "STDERR: ${err}"
  }

  out
}

выполнит команду grep и приблизит вас к тому, что вы хотите.

Следует отметить, что перенаправление вывода > в вашей командной оболочке, насколько я знаю, трудно сделать для внешнего процесса из java / groovy, и поэтому мы записываем вывод в final_output.logфайл изнутри groovy вместо выполнения команды с использованием перенаправления вывода.

Я также добавил максимальное время ожидания в пять секунд при выполнении процесса grep.Это не требуется, и эта строка может быть безопасно удалена, это просто как гарантия для случаев, когда grep блокируется бесконечно.

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