マルチ入力マルチ出力コマンド

マルチ入力マルチ出力コマンド

私は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

この場合はシェルループを使用します。

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シェルにそのような操作のための基本要素がある場合、このコマンドは必要ないかもしれません。

完全なシェルスクリプトは次のとおりです。

#!/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

おすすめ記事