[英]parsing string in bash
我在名为src
的目录中有一堆C++
文件。 我需要查找所有具有*Test.cc
的文件,但没有.cc
文件类型,因此它只是[filename]Test
。 我目前有:
1 FILES=./src/*Test.cc
2
3 for f in $FILES
4 do
5 echo "processing $f"
6 done
所以我只需要文件名,没有./src/
和.cc
。 例如,上面的脚本将产生:
processing ./src/UtilTest.cc
而且我只需要UtilTest
。 我该怎么做?
在第4行和第5行之间插入此行将导致bash代码段产生所需的输出:
f=$(basename $f .cc)
您可以使用此一个内衬命令完成此操作:
首先是将其存储在文件中以供参考:
find ./src/ -name *Test.cc | tee samp.txt
然后打印它或取决于您要对文件执行的操作:
cat samp.txt | while read i; do echo `basename $i .cc`; done;
只是向您展示另一个选择:对于更高版本的bash(不再确定哪个版本),可以使用数组和字符串操作:
files=(.src/*Test.cc) # create bash array (space-separated)
for f in ${files[@]##./} # loop through array, stripping leading path
do
echo ${f%%.*} # f is now array element; strip its extension
done
显然,就像您自己的示例一样,当文件名包含空格或具有多个扩展名时(例如, Your File Test.cc.hpp
),将出现问题。
无论如何,这就像其他两个答案一样,避开了对基basename
的调用,并且不需要临时文件。 唯一的缺点是由于bash版本要求,其有限的可移植性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.