다음 형식의 세미콜론으로 구분된 재생 목록이 있습니다.
Thåström ; Stjärna som är din ; Skebokvarnsv. 209
;
첫 번째 항목을 대시(-)로 바꾸고 ;
두 번째 항목을 "- Album: " 문자열로 바꾸고 싶습니다 .
다음 구성을 시도하고 있지만 올바르지 않습니다.
sed 's/\;/\-/1;s/\;/\-\ Album\:/2'
부울 결과는 다음과 같습니다.
Thåström - Stjärna som är din ; Skebokvarnsv. 209
첫 번째 단락에 잘못된 부분이 있다는 것을 알고 있습니다. 왜냐하면 다음을 실행하면 sed 's/\;/\-\ "Album\:"/2'
줄 끝에서 올바른 결과를 얻을 수 있기 때문입니다.
Thåström ; Stjärna som är din - Album: Skebokvarnsv. 209
어떤 도움이라도 대단히 감사하겠습니다!
답변1
저는 MacOS 13.5.2의 일반 "sed"에서 이것을 실행하고 있습니다.
나는 당신이 원하는 것을 얻는 데 매우 가깝다고 생각합니다. 내가 채택한 구성은 명령줄에 지정된 두 가지 표현식만 사용합니다. -f <command_file>
원하는 경우 파일에 넣고 옵션을 사용할 수도 있습니다.
sed -e 's/;/-/' -e 's/;/- Album:/'
첫 번째 표현식은 해당 줄의 첫 번째 세미콜론으로 대체됩니다. 두 번째 표현식은 다음 표현식을 변경합니다. 순차적으로 처리되기 때문에 예제처럼 마지막에 숫자 플래그를 지정하는 것에 대해 걱정할 필요가 없습니다.
출력 예를 구분하려면 추가 빈 줄을 사용하십시오.
echo 'Thåström ; Stjärna som är din ; Skebokvarnsv. 209' \
| sed -e 's/;/-/' -e 's/;/- Album:/'
Thåström - Stjärna som är din - Album: Skebokvarnsv. 209
예상 도착 시간:원래 예에서 두 번째 표현식에는 2
플래그가 있습니다. 이것 은 두 번째 것을 대체할 것입 니다 ;
. 그러나 첫 번째 교체가 첫 번째 교체를 수행 ;
하므로 명령이 교체를 시도합니다.제삼 ;
온라인. 그냥 놓으면 2
예상대로 작동할 것입니다.
답변2
사용 gawk
:
$ awk '{ sub(/;/,"-"); sub(/;/, "- Album:")}1' file
$ awk '{ print gensub(/(^[^;]*);([^;]*);(.*)/, "\\1-\\2- Album:\\3", g);}' file
동일한 패턴을 다른 문자열로 여러 번 바꾸려면 다음 방법을 사용할 수 있습니다.
$ awk 'BEGIN{ar[1]="-"; ar[2]="- Album:";}{r=$0; for(i=1;i<=length(ar);i++) r=gensub(/;/, ar[i], 1, r); print r}' file
답변3
사용행복하다(이전 Perl_6)
~$ raku -ne 'S/ \; /-/ andthen S/ \; /- Album:/.put;' file
Raku는 Perl 프로그래밍 언어 계열의 프로그래밍 언어입니다. 위에서는 -ne
자동 인쇄가 아닌 한 줄씩 명령줄 플래그를 사용 하고 단순히 두 번의 연속 S///
대체를 수행한 다음 out 을 수행했습니다 put
. 이 put
호출은 줄 끝에 개행 문자를 추가합니다.
입력 예:
Thåström ; Stjärna som är din ; Skebokvarnsv. 209
예제 출력:
Thåström - Stjärna som är din - Album: Skebokvarnsv. 209
이것매우 좋은Raku의 한 가지 측면은 유니코드를 지원한다는 것입니다. 따라서 유니코드 특성을 사용하여 텍스트를 필터링 및/또는 바꿀 수 있습니다.
~$ raku -ne 'S/ \; /-/ andthen S/ \; /- Album:/ andthen S/ <:Script<Runic>>+ /⁒/.put;'
입력 예:
16F1 ᛱ Thåström ; Stjärna som är din ; Skebokvarnsv. 209
16F2 ᛲ Thåström ; Stjärna som är din ; Skebokvarnsv. 209
16F3 ᛳ Thåström ; Stjärna som är din ; Skebokvarnsv. 209
예제 출력:
16F1 ⁒ Thåström - Stjärna som är din - Album: Skebokvarnsv. 209
16F2 ⁒ Thåström - Stjärna som är din - Album: Skebokvarnsv. 209
16F3 ⁒ Thåström - Stjärna som är din - Album: Skebokvarnsv. 209
위의 예시 입력에는 세 개의 룬 문자가 삽입되어 있습니다. Raku 정규 표현식은 다음을 기반으로 문자를 식별 및/또는 필터링할 수 있습니다.유니코드 스크립트지정됩니다(이 경우 <:Script<Runic>>
). 룬 문자는 유니코드 ⁒
"상업용 빼기"(U+2052) 로 올바르게 대체되지만 StackOverflow에서는 이를 표시할 수 없는 것 같습니다.
https://www.unicode.org/charts/PDF/U16A0.pdf
https://docs.raku.org/언어/regexes
https://raku.org
답변4
아무 sed나 사용하세요:
$ sed 's/;\([^;]*\);/-\1- Album:/' file
Thåström - Stjärna som är din - Album: Skebokvarnsv. 209