2017-04-26 78 views
3

我有几个gz文件testfile1.gz,testfile2.gz等我试图zgrep每个文件和重定向输出到不同的文件具有相同的文件名,但没有扩展名。下面是我一直在尝试,但我宁愿是testfile1,testfile2等没有gz扩展名。我该如何解决它?谢谢。在zgrep结果上重命名文件

for file in hello*; do zgrep 'line' $file > $file.TEST ; done 

回答

2

你可以试试:

for file in hello*.gz; do 
    zgrep 'line' > "${file%.gz}.TEST" 
done 

从TLDP上Manipulating Strings

$ {字符串%子} #Deletes从$字符串后面$子的最短的匹配。

+0

工作。谢谢。 – martinbshp

1

basename命令是你的朋友:

for file in hello*; do zgrep 'line' "$file" > $(basename "$file" .gz); done

或者,干脆从输出文件的名称中删除 '广州':

for file in hello*; do zgrep 'line' "$file" > $(sed 's/.gz//' <<< "$file"); done

+0

这将为不成功的匹配项创建空文件。 – ceving

+0

'-s'选项似乎不是可移植的:[man basename](https://linux.die.net/man/1/basename) – silel

+0

我得到basenmae的无效选项 basename:invalid option - ' s' ambigiguous redirect – martinbshp