2015-10-05 56 views
1

我有其中含有七种目录如何更改目录和列表输出次数?

meas_2015-06-29_19-03-00 meas_2015-06-29_19-18-28 meas_2015-06-29_19-22-58 meas_2015-06-29_19-26-58 meas_2015-06-29_19-30-58 meas_2015-06-29_19-47-58 meas_2015-06-29_20-39-58 

他们每个人都有XML文件,所有的测量参数已被写入其中包括该行

<num_samples>245760</num_samples> 

我想要写所有七个样本数量的文件夹屏幕上。

我该如何编写shell脚本?我应该使用别名还是...? 我已经试过这样

grep -Ri "num-samples" "*.xml" | wc -l 

,但得到

grep: *.xml: No such file or directory 
0 

所以我需要先进入每一个子目录。

+0

7个目录中xml文件的名称是什么? – Cyrus

+0

@Cyrus XML是自动编写的,所以它对于每个目录都会更改。263_2015-06-29_19-03-00_2015-06-29_19-05-00_R000_2048H.xml对于第一个,263_2015-06-29_19-18-28_2015-06- 29_19-19-58_R000_131072H.xml第二天itd –

回答

2

grep -Ri "num_samples" *将提供类似的输出如下:

meas_2015-06-29_19-03-00/a.xml:  <num_samples>245760</num_samples> 
meas_2015-06-29_19-18-28/a.xml:  <num_samples>245760</num_samples> 
meas_2015-06-29_19-22-58/a.xml:  <num_samples>245760</num_samples> 
meas_2015-06-29_19-26-58/a.xml:  <num_samples>245760</num_samples> 
meas_2015-06-29_19-30-58/a.xml:  <num_samples>245760</num_samples> 
meas_2015-06-29_19-47-58/a.xml:  <num_samples>245760</num_samples> 
meas_2015-06-29_20-39-58/a.xml:  <num_samples>245760</num_samples> 

另外,还要注意在你的grep命令,你已经使用-(数量 - 样品)代替_(num_samples)

grep -Rih "num_samples" *将从输出中排除文件名称。
grep -Ri "num_samples" * | sed 's/<\/.*//g; s/:\s\+.*>/ /g'将提供以下几点:

meas_2015-06-29_19-03-00/a.xml 245760 
meas_2015-06-29_19-18-28/a.xml 245760 
meas_2015-06-29_19-22-58/a.xml 245760 
meas_2015-06-29_19-26-58/a.xml 245760 
meas_2015-06-29_19-30-58/a.xml 245760 
meas_2015-06-29_19-47-58/a.xml 245760 
meas_2015-06-29_20-39-58/a.xml 245760 

grep -Rih "num_samples" * | grep -o '[0-9]\+'将在每个文件提供各<num_samples>的值。

2

与GNU的grep试试这个:

grep -o '[0-9]\+' meas_*/*.xml 
+0

可能还有更多的行,没有。首先grep''''并用'grep -o'(或使用'tr')剪掉标签。 –