Sed 명령을 사용하여 두 패턴 사이의 모든 것을 일치시키는 방법은 무엇입니까?

Sed 명령을 사용하여 두 패턴 사이의 모든 것을 일치시키는 방법은 무엇입니까?

다음은 구문 분석 중인 CSV 파일의 행 pf 데이터 예입니다.

"Monday, July 3, 2023 at 9:12:34 PM GMT+0:00","Answer 1","Answer 2","Answer 3"

", 2023 at 9:12:34 PM GMT+0:00" 부분을 제거하려고 하므로 다음과 같습니다.

"Monday, July 3","Answer 1","Answer 2","Answer 3"

CSV 파일의 각 행에 대한 타임스탬프 데이터는 다른 값이므로 간단히 하드코딩할 수는 없습니다.

이 명령을 시도하면 파일에 아무 일도 일어나지 않습니다. 이유는 모르겠지만,

sed -i 's/, 2023[","]/","/g' example.csv

뭔가 단순한 것을 간과하고 있는 것 같은 느낌이 든다.

답변1

[","]일치하다하나의"또는 , 또는 와 ,일치하는 문자입니다 ".

당신은 일치하고 싶을 수도 있습니다주문하다문자가 아니며 "null로 대체됩니다. 따라서 (항상 -i먼저 테스트 하지 마십시오 )

sed -i 's/, 2023[^"]*//' example.csv

그러나 CSV 형식을 이해하는 도구 사용을 고려할 수도 있습니다. 예를 들면 다음과 같습니다.밀러

mlr --csv -N --quote-all put '$1 = sub($1,", 2023.*", "")'  example.csv

답변2

사용sed

$ sed -i.bak 's/,[^,]*"/"/' input_file
"Monday, July 3","Answer 1","Answer 2","Answer 3"

관련 정보