多输入多输出命令

多输入多输出命令

我正在 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

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

答案1

在这种情况下我使用 shell 循环:

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

basename如果您的 shell 有用于此类操作的原语,您甚至可能不需要该命令。

作为一个完整的 shell 脚本,它看起来像:

#!/bin/bash

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

相关内容