다중 입력 다중 출력 명령

다중 입력 다중 출력 명령

나는 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

관련 정보