我正在 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'
然后你就根本不需要切割了。