簡體   English   中英

在bash中解析字符串

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM