我有几个gz文件testfile1.gz,testfile2.gz等我试图zgrep每个文件和重定向输出到不同的文件具有相同的文件名,但没有扩展名。下面是我一直在尝试,但我宁愿是testfile1,testfile2等没有gz扩展名。我该如何解决它?谢谢。在zgrep结果上重命名文件
for file in hello*; do zgrep 'line' $file > $file.TEST ; done
我有几个gz文件testfile1.gz,testfile2.gz等我试图zgrep每个文件和重定向输出到不同的文件具有相同的文件名,但没有扩展名。下面是我一直在尝试,但我宁愿是testfile1,testfile2等没有gz扩展名。我该如何解决它?谢谢。在zgrep结果上重命名文件
for file in hello*; do zgrep 'line' $file > $file.TEST ; done
你可以试试:
for file in hello*.gz; do
zgrep 'line' > "${file%.gz}.TEST"
done
从TLDP上Manipulating Strings:
$ {字符串%子} #Deletes从$字符串后面$子的最短的匹配。
的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
这将为不成功的匹配项创建空文件。 – ceving
'-s'选项似乎不是可移植的:[man basename](https://linux.die.net/man/1/basename) – silel
我得到basenmae的无效选项 basename:invalid option - ' s' ambigiguous redirect – martinbshp
工作。谢谢。 – martinbshp