주어진 문자열로 시작하는 모든 시퀀스 항목을 다음 기호 항목으로 바꾸는 방법은 무엇입니까?

주어진 문자열로 시작하는 모든 시퀀스 항목을 다음 기호 항목으로 바꾸는 방법은 무엇입니까?

'string_string':다음 번 쉼표까지 포함하여 수천 개의 특정 문자열이 포함된 거대한 한 줄 파일을 편집 ,한 다음 파일에서 이러한 항목을 제거하고 싶습니다 .

나는 이것이 sedor 를 사용하여 awk수행될 수 있다고 생각합니다. 문자열/문자 스트림을 조작하기 위한 도구로 광고되지만 여러 줄 파일에도 더 적합합니다.

awk와 명령 모두 다소 신비스러울 수 있고, 매일 발생하는 다양한 문제를 해결하면서 배우고 싶기 때문에 sed결과 명령 자체에 대해 간략하게 설명하고 싶습니다.

첫 번째 접근 방식은 녹화된 시퀀스를 실행하는 것이 vim었지만 지금은 3시간 동안 실행 중이고 끝까지 끝나지도 않았습니다. 어느 시점에서 문제가 해결되더라도 더 나은, 더 효율적인 방법을 알고 싶습니다. .

요청된 예:

['string_string': <asdffds.1j2_3>, 'abd_dfA': 212, 'kajaj': <asdffdsa>, 'string_string': <fdjjdjd.asjsk2222>, 'jsjsjsj': 32.23], 
['string_string': <asdffds.1j2_3>, 'abd_dfA': 212, 'kajaj': <asdffdsa>, 'string_string': <fdjjdjd.asjsk2222>, 'jsjsjsj': 32.23]

결과:

[ 'abd_dfA': 212, 'kajaj': <asdffdsa>,  'jsjsjsj': 32.23], 
[ 'abd_dfA': 212, 'kajaj': <asdffdsa>,  'jsjsjsj': 32.23]

답변1

sedLINE_MAX보다 긴 줄(일부 시스템에서는 1024바이트까지)을 처리할 수 있는 경우 다음을 수행할 수 있습니다.

sed "s/'string_string':[^,]*,//g" < your-file

그렇지 않은 경우 언제든지 다음을 사용할 수 있습니다 perl.

perl -pe "s/'string_string':.*?,//g" < your-file

답변2

한 가지 접근 방식은 문자열 처리를 사용하여 string_string 및 쉼표 위치를 차례로 모니터링하는 것입니다. 각 쌍에서:

perl -plse '
  substr($_,$p-1,$q-$p+1,"")
           while
  ++($p=index($_,$s,$q-$p)) &&
  ++($q=index($_,",",$p));
' -- -s="'string_string':" file

관련 정보