한 줄에 한 단어씩 100개가 넘는 단어 목록이 포함된 텍스트 파일이 있습니다.
Oliver.txt
Jack.txt
Noah.txt
Leo.txt
William.txt
텍스트 파일 콘텐츠를 다음으로 변환하고 싶습니다.
gallery-dl -g -i Oliver.txt > OliverX.txt
gallery-dl -g -i Jack.txt > JackX.txt
모든 단어에 대해서도 마찬가지입니다. 어떻게 해야 하나요?
답변1
GNU awk에서:
awk -i inplace -v FS="." '{print "gallery-dl -g -i " $1 ".txt > " $1 "X.txt"}' FILE
그것이 무엇을 대체할 것인가문서새로운 콘텐츠로. -i inplace
새 내용을 stdout으로 인쇄하고 원본 내용을 갖고 싶다면 제거하십시오.문서손대지 않은.
답변2
perl
또는 에서 거의 동일한 구문을 사용하여 이 작업을 쉽게 수행할 수 있습니다 sed
.
sed
:
$ sed -E 's/(.*).txt/gallery-dl -g -i \1.txt > \1X.txt/' file
gallery-dl -g -i Oliver.txt > OliverX.txt
gallery-dl -g -i Jack.txt > JackX.txt
gallery-dl -g -i Noah.txt > NoahX.txt
gallery-dl -g -i Leo.txt > LeoX.txt
gallery-dl -g -i William.txt > WilliamX.txt
perl
:
$ perl -pe 's/(.*).txt/gallery-dl -g -i \1.txt > \1X.txt/' file
gallery-dl -g -i Oliver.txt > OliverX.txt
gallery-dl -g -i Jack.txt > JackX.txt
gallery-dl -g -i Noah.txt > NoahX.txt
gallery-dl -g -i Leo.txt > LeoX.txt
gallery-dl -g -i William.txt > WilliamX.txt
답변3
사용행복하다(이전 Perl_6)
raku -pe 's/ ^ (.+) \.txt $ /gallery-dl -g -i $0.txt > $0X.txt/;'
@terdon의 Perl(5) 코드와 마찬가지로 Raku의 캡처는 $0
Perl(5)에서가 아니라 1에서 시작합니다. 위 코드에서는 (.+)
확장자 앞에 문자가 하나 이상 필요합니다 \.txt
. alnum
Raku 대체 연산자의 왼쪽 절반에 있는 모든 비문자는 s///
리터럴로 이해되도록 이스케이프되어야 합니다(예 \.txt
: ). 마지막으로 Raku 대체 연산자의 왼쪽 절반은 s///
기본적으로 공백을 허용합니다.
입력 예:
Oliver.txt
Jack.txt
Noah.txt
Leo.txt
William.txt
예제 출력:
gallery-dl -g -i Oliver.txt > OliverX.txt
gallery-dl -g -i Jack.txt > JackX.txt
gallery-dl -g -i Noah.txt > NoahX.txt
gallery-dl -g -i Leo.txt > LeoX.txt
gallery-dl -g -i William.txt > WilliamX.txt