하나의 라이너로 할 수 있습니까?
나는 다음과 같은 결과를 얻었습니다.
"First line" - Description
" Second line" - Description
"Third line" - Description
" Fourth line" - Description
이 입력은 자동으로 생성됩니다.
각 줄에서 "
(quote + space) 의 첫 번째 항목을 (quote)로 바꾸고 싶습니다 . 대체 항목을 전역적으로 적용하면 to 이 "
발생할 때마다 변경되므로 sed oneliner를 사용하여 이를 수행할 수 있는지 궁금합니다.line" -
line"-
^
나는 이렇게 사용해 보았습니다 .
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