Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“解释”;sed";在shell命令中_Sed - Fatal编程技术网

“解释”;sed";在shell命令中

“解释”;sed";在shell命令中,sed,Sed,我使用以下命令从多个文件中提取第一个“结果”,并将其写入一个文件中 for file in *.xml; do cat $file | grep result | sed -n 2p | sed s:"<result>":"": | sed s:"</result>":"": >> tmp.txt; done 用于*.xml格式的文件;do cat$file | grep result | sed-n 2p | sed s::::::;sed s::::::

我使用以下命令从多个文件中提取第一个“结果”,并将其写入一个文件中

for file in *.xml; do cat $file | grep result | sed -n 2p | sed s:"<result>":"": | sed s:"</result>":"": >> tmp.txt; done
用于*.xml格式的文件;do cat$file | grep result | sed-n 2p | sed s::::::;sed s::::::::>>tmp.txt;完成
两年后我正在查看它,我不记得我是如何从其中两个(第二个是-0.083118623723832552)的文件中获取第一个“结果”(0.0183006384717713)中的数字的,这些文件看起来如下:

<?xml version="1.0" encoding="UTF-8"?>
<fit_results>
  <input_file>/Users/hunululu/Desktop/current/m203/ratios/tmp.xml</input_file>
  <time>Fri Oct 17 17:45:51 2014</time>
  <fit_converged>true</fit_converged>
  <iterations>3</iterations>
  <dof>1</dof>
  <chi_sqr_per_dof>0.088802954844880599</chi_sqr_per_dof>
  <Q>0.76570450204332174</Q>
  <parameter_values>
    <parameter>
      <name>a</name>
      <result>0.018300606384717713</result>
      <error>0.0090474462765945517</error>
    </parameter>
    <parameter>
      <name>b</name>
      <result>-0.083118623723832552</result>
      <error>0.045747262135131625</error>
    </parameter>
  </parameter_values>
</fit_results>

/用户/hunulu/Desktop/current/m203/rations/tmp.xml
2014年10月17日星期五17:45:51
真的
3.
1.
0.088802954844880599
0.76570450204332174
A.
0.018300606384717713
0.0090474462765945517
B
-0.083118623723832552
0.045747262135131625

有人能帮我理解它是如何得到第一个结果而不是第二个结果的吗?谢谢。

这里的钥匙是
2p
p
表示打印当前图案空间。但是如果您在它前面加上一些数字
i
,这意味着在模式空间中打印
i的第

在您的情况下,
grep
之后的模式空间是:

<fit_results>
      <result>0.018300606384717713</result>
      <result>-0.083118623723832552</result>
</fit_results>

0.018300606384717713
-0.083118623723832552

因此,
2p
将拾取其中的第二行,从而获取第一个结果

更基本的问题是,任何时候在shell中编写循环只是为了操纵文本,都有错误的方法。您的整个命令行可以简化为:

awk -F'[<>]' 'FNR==1{cnt=0} /result/&&(++cnt==2){print $3}' *.xml > tmp.txt
awk-F'[]”FNR==1{cnt=0}/result/&(++cnt==2){print$3}'*.xml>tmp.txt

谢谢。现在,帮自己一个忙并对代码进行注释是有道理的!我刚和一个同事谈过。评论下一个家伙,很可能是你自己,因为你已经忘记了你以前做过什么。有趣的是,这是紧接着发生的。:-)是的,我应该。谢谢你的建议最好的答案!另一方面,我想说这是
xmllint
的任务,非常感谢。这确实有助于更好地理解