从终端解析命令

时间:2016-05-30 20:51:40

标签: ruby parsing

我想在终端中编写一个命令,如$ tesseract -v tesseract 3.04.01 leptonica-1.73 libgif 5.1.2 : libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8 : libwebp 0.4.4 : libopenjp2 2.1.0 ,解析命令,并获取字符串config.section.key"section"。我想在我的函数中使用这两个键来搜索哈希。

有没有办法从终端解析命令来执行此操作?

2 个答案:

答案 0 :(得分:2)

要执行终端命令,你可以在这里使用反引号或系统调用的一些例子,请记住这是所有伪代码,我不知道这是否会正确运行:

def create_file
  `touch test.txt`
end

def cmd
  system('ls')
end

def check_file
  results = cmd
  if results.include?('test.txt')
    puts 'File exists.'
  else
    puts 'Creating file..'
    create_file
  end
end

现在,对于解析部分,根据您要执行的操作,您可以将信息保存到变量中,也可以使用正则表达式来提取信息。因此,如果您想要保存信息,请使用正则表达式提取数字:/\d+/results = cmd ..

我希望这能回答你的问题。

要拆分信息,您可以使用split方法,例如:

def cmd
  `prt_jobs`
end

def check_jobs
  res = cmd
  res.split(".")
end

这将按周期分割打印作业命令的结果,并将它们分成一个数组。我会在手机上向您展示更多信息,因此必须等待

答案 1 :(得分:1)

正如Tadman评论的那样,如果您愿意,可以使用String#split方法将argv分割为句点字符:

config, section, key, *rest = ARGF.argv.split('.')

处理解析命令行时的另一个好选择是Ruby标准库OptionParser类。 OptionParser类不是手动重建所有的CLI解析,而是内置了更多。由此产生的脚本可以感觉更像Linux,并且对于之前使用过bash的人来说都很熟悉。