具有不同扩展名的多输入和多输出命令

具有不同扩展名的多输入和多输出命令

我正在 Linux 机器上使用 grep、sed 和 cut 命令执行一些操作:

zgrep -A1 "^module" *.v.gz | sed -n -e 's/^\(module \)*\(.*(.*)\).*$/\2/p' | cut -f1 -d"("

这是在文件扩展名为 .v.gz 的文件上运行的,我希望输出文件具有 .txt 扩展名。

例如,输入文件名:

abcd.v.gz
efgh.v.gz
ijkl.v.gz
mnop.v.gz

输出文件名

abcd.txt
efgh.txt
ijkl.txt
mnop.txt

所以我想保留相同的文件名前缀但更改扩展名。如何对任意数量的文件执行此操作?

我不是在寻找 shell 原语

答案1

使用for循环来处理每个文件

for f in *.v.gz
do
    zgrep -A1 "^module" "$f" | 
    sed -n -e 's/^\(module \)*\(.*(.*)\).*$/\2/p' |
    cut -f1 -d"(" > "${f%.v.gz}.txt"
done

我对 sed 程序有一点疑问,我猜你想要

sed -n -e 's/^module *\([^(]*\).*$/\1/p'

然后你就根本不需要切割了。

相关内容