내 bash
스크립트가 실행됩니다 sed
. 실행하는 데 사용하는 명령은 다음과 같습니다.
sed -f sedhw.bash thesbians.txt
콘텐츠sedhw.bash
s/[0-9]*//g
s/1908/---/g; s/1895/---/g; s/1903/---/g
s/,.*//g
s/^[^"]*"/"/
s/,[^",]*"/,/;s/"//g
파일의 각 명령을 한 번 실행하여 하나가 아닌 5개의 다른 출력을 제공하려면 이 명령이 필요합니다.
텍스트 파일은 다음과 같습니다
Chase,Cornelius 1943 "Chevy"
Davis,Ruth 1908 "Bette"
Keaton,Joseph 1895 "Buster"
Stone,Emily 1988 "Emma"
Lee,Shelton 1957 "Spike"
Reynolds,Mary 1932 "Debbie"
Crosby,Harry 1903 "Bing"
Fey,Stamatina 1970 "Tina"
답변1
~처럼@roaima그리고@kusalananda이미 댓글을 달았으며 귀하의 것은 sedhw.bash
sedfile입니다.
sed -f sedhw.bash thesbians.txt
sedhw.bash의 모든 sed 명령은 thesbians.txt 파일에 대해 실행됩니다.
지금 뭐하고 지내?대신에sedhw.bash의 행을 반복하고 각 행을 실행하여 새 출력 파일을 생성하는 것입니다.
#!/bin/bash
while read num line; do
sed "$line" thesbians.txt > output.${num}.txt
done < <(nl sedhw.bash)
설명하자면,
nl sedhw.bash
명령에 번호가 매겨지고 "탭으로 구분"된 줄 번호와 명령이 표시됩니다.
1 s/[0-9]*//g
2 s/1908/---/g; s/1895/---/g; s/1903/---/g
3 s/,.*//g
4 s/^[^"]*"/"/
5 s/,[^",]*"/,/;s/"//g
<(...)
명령 출력은 while 루프에서 파일로 렌더링됩니다.
루프는 이 "파일"을 한 줄씩 입력 <
하고 탭으로 구분된 필드를 변수 "num" 및 "line"으로 읽습니다.
sed
"$line" 명령을 실행하여 sedhw.bash에서 해당 라인 번호의 파일에 씁니다.
결과
$ for item in output*; do echo; echo "=== $item ==="; cat $item ; done
=== output.1.txt ===
Chase,Cornelius "Chevy"
Davis,Ruth "Bette"
Keaton,Joseph "Buster"
Stone,Emily "Emma"
Lee,Shelton "Spike"
Reynolds,Mary "Debbie"
Crosby,Harry "Bing"
Fey,Stamatina "Tina"
=== output.2.txt ===
Chase,Cornelius 1943 "Chevy"
Davis,Ruth --- "Bette"
Keaton,Joseph --- "Buster"
Stone,Emily 1988 "Emma"
Lee,Shelton 1957 "Spike"
Reynolds,Mary 1932 "Debbie"
Crosby,Harry --- "Bing"
Fey,Stamatina 1970 "Tina"
=== output.3.txt ===
Chase
Davis
Keaton
Stone
Lee
Reynolds
Crosby
Fey
=== output.4.txt ===
"Chevy"
"Bette"
"Buster"
"Emma"
"Spike"
"Debbie"
"Bing"
"Tina"
=== output.5.txt ===
Chase,Chevy
Davis,Bette
Keaton,Buster
Stone,Emma
Lee,Spike
Reynolds,Debbie
Crosby,Bing
Fey,Tina