[英]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.