![주어진 문자열로 시작하는 모든 시퀀스 항목을 다음 기호 항목으로 바꾸는 방법은 무엇입니까?](https://linux55.com/image/205656/%EC%A3%BC%EC%96%B4%EC%A7%84%20%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94%20%EB%AA%A8%EB%93%A0%20%EC%8B%9C%ED%80%80%EC%8A%A4%20%ED%95%AD%EB%AA%A9%EC%9D%84%20%EB%8B%A4%EC%9D%8C%20%EA%B8%B0%ED%98%B8%20%ED%95%AD%EB%AA%A9%EC%9C%BC%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
'string_string':
다음 번 쉼표까지 포함하여 수천 개의 특정 문자열이 포함된 거대한 한 줄 파일을 편집 ,
한 다음 파일에서 이러한 항목을 제거하고 싶습니다 .
나는 이것이 sed
or 를 사용하여 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
sed
LINE_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