Shell脚本 - 如何正确解析输出,学习示例。

时间:2012-02-13 23:32:43

标签: shell scripting ksh

所以我想使用shell脚本自动执行手动任务,但是我对如何解析几个命令的输出感到有点迷茫。我可以在没有问题的情况下使用其他语言,所以我只是解释我在psuedo代码中的用途,并提供我正在尝试解析的cmd输出的示例。

输出示例:

  

Chg 2167467 on 2012/02/13 by user1234 @ filename'recription of submission'

我需要解析的是'2167467'。所以我想要做的是拆分空格并将元素1用于另一个命令。我的下一个命令的输出如下所示:

  

在2012/02/13 18:10:15用户1234 @ filename更改2167463

   description of submission
     

受影响的文件......

     

... // filepath / dir1 / dir2 / dir3 / filename#2298编辑

我需要解析'// filepath / dir1 / dir2 / dir3 / filename#2298'并在另一个命令中使用它。同样,我要做的是从输出中删除空白行,抓住第4行,然后拆分空格。从那里我将从分裂中获取第一个元素并在下一个命令中使用它。

如何在shell脚本中执行此操作?一些教程的例子或要点会很棒。

3 个答案:

答案 0 :(得分:1)

不清楚是否要使用第一个命令的结果来处理第二个命令。如果是这样,那么

targString=$( cmd1 | awk '{print $2}')
command2 | sed -n "/${targString}/{n;n;n;s@.*[/][/]@//@;p;}"

您的示例数据中包含2个不同的Chg值(2167467,2166763),因此如果您只想以两种不同的方式处理此输出,则更简单

cmd1 | awk '{print $2}'
cmd2 | sed -n '/Change/{n;n;n;s@.*[/][/]@//@;p;}'

我希望这会有所帮助。

答案 1 :(得分:0)

我不是100%明确你的问题,但我会使用awk。

http://www.cyberciti.biz/faq/bash-scripting-using-awk/

答案 2 :(得分:0)

你的第一个变量看起来像这样

temp="Chg 2167467 on 2012/02/13 by user1234@filename 'description of submission'"

要获得您想要的数字,请执行以下操作:

temp=`echo $temp | cut -f2 -d" "`

将第二个命令的输出保存到类似

的文件中
command $temp > file.txt

要从文件中获取所需内容,您可以运行此命令:

temp=`tail -1 file.txt | cut -f2 -d" "`
rm file.txt

最后一段代码获取文件的最后一个非白色行,并在第二组空格上划界