sed를 사용하여 파일의 모든 라인을 라인의 첫 번째 패턴으로 대체

sed를 사용하여 파일의 모든 라인을 라인의 첫 번째 패턴으로 대체

하나의 라이너로 할 수 있습니까?

다음과 같은 출력이 있습니다.

"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

관련 정보