
하나의 라이너로 할 수 있습니까?
다음과 같은 출력이 있습니다.
"First line" - Description
" Second line" - Description
"Third line" - Description
" Fourth line" - Description
이 입력은 자동으로 생성됩니다.
"
각 줄에서 (따옴표 + 공백) 의 첫 번째 항목을 "
(따옴표) 로 바꾸고 싶습니다 . 대체를 전역적으로 적용하면 line" -
to 가 발생할 때마다 변경되므로 line"-
sed one liner를 사용하여 이를 수행할 수 있는지 궁금합니다.
^
나는 이렇게 사용해 보았습니다 .
sed -r ':a;N;$!ba;s/(\^\" )/\"/g'
하지만 작동하지 않으며 아무것도 대체하지 않습니다. 나는 노력했다
sed -r ':a;N;$!ba;s/(^|\" )/\"/g'
그리고 모든 발생을 대체합니다. 방금 sed를 사용하기 시작했기 때문에 내가 뭔가 잘못하고 있는지 잘 모르겠습니다.
내가 여기서 무엇을 놓치고 있는 걸까요?
답변1
당신은 그것을 지나치게 생각하고 있습니다. sed
기본적으로 ( /g
수정자 없이) 줄의 첫 번째 인스턴스만 교체합니다. 하지만 줄의 첫 번째 인스턴스를 줄의 시작 부분에 있는 인스턴스만큼 원하지 않기 때문에 여전히 고정하고 싶습니다. 그리고 일반적으로 사용하려는 명시적인 라인 동작이 필요하지 않습니다(왜?).
sed 's/^" /"/'
답변2
geekosaur의 답변에 대해 언급할 수 없기 때문에 보다 일반적인 답변입니다. ^(줄 시작 앵커)를 넣지 않을 것입니다. 예를 들어, A의 첫 번째 항목을 B로 바꾸려면 다음을 수행합니다.
sed 's/A/B/'
답변3
사용펄
~$ perl -pe 's/^" /"/;' file
사용라쿠(이전에는 Perl_6으로 알려짐)
~$ raku -pe 's/^\" \s /"/;' file
샘플 입력:
"First line" - Description
" Second line" - Description
"Third line" - Description
" Fourth line" - Description
샘플 출력(두 코드 예제 모두):
"First line" - Description
"Second line" - Description
"Third line" - Description
"Fourth line" - Description
https://perldoc.perl.org/perlre
https://perldoc.perl.org/perltrap#Sed-Traps
https://docs.raku.org/언어/regexes