如果我只知道文件扩展名,如何在 UNIX 中查找完整的文件名。

问题描述 投票:0回答:1

假设我有一个文件,其中包含其他带有某些扩展名的文件名[.dat、.sum 等]。

文本文件包含

 gdsds sd8ef g/f/temp_temp.sum 
 ghfp hrwer h/y/test.text.dat
 if[-r h/y/somefile.dat] then....

我想获取完整的文件名,就像上面的文件一样,我应该输出为

temp_temp.sum
test.text.dat
somefile.dat

我使用的是 AIX unix,其中 grep -ow [a-zA-Z_] 文件名不起作用,因为 AIX -o 开关不存在。

shell unix scripting
1个回答
1
投票

sed 很好,但是由于您有一系列类型的“记录”,也许 awk 可以提供帮助。

我的目标是 awk 找到的任何带有“/”的“单词”,然后取出该单词,删除最后一个“/”之前的所有内容,只留下文件名。

{ 
   cat -<<EOS
   gdsds sd8ef g/f/temp_temp.sum 
   ghfp hrwer h/y/test.text.dat
   if[-r h/y/somefile.dat] then....
EOS
} \
| awk '{ 
          for (i=1; i<=NF;i++) {
            if ($i ~ /.*\//) {
              fName=$i
              sub(/.*\//, "", fName)
              # put any other chars you to to delete inside the '[ ... ]' char list
              sub(/[][]/, "", fName)
              if (fName) {
                 print file
              }
            }
         }
       }'

输出

temp_temp.sum
test.text.dat
somefile.dat
© www.soinside.com 2019 - 2024. All rights reserved.