10GB의 데이터가 포함된 파일이 있고 sed -i 's/pattern/replace_pattern/g'
해당 파일에 대해 2048개의 대체 표현식을 수행하려고 합니다.
이 작업을 보다 빠르고 효율적으로 수행할 수 있는 방법이 있습니까?
현재는 순차적으로 부팅 sed
또는 부팅을 하고 있습니다 .perl
sed -i "s/VSS:F31128015/VSS_F31128015/g" file.data
sed -i "s/VSS:F31127969/VSS_F31127969/g" file.data
OR
perl -pi -e 's/VSS\:F31128015/VSS_F31128015/g' file.data
perl -pi -e 's/VSS\:F31127969/VSS_F31127969/g' file.data
실행 속도에 약간의 차이가 있다는 것을 알았습니다 perl
. 아니면 sed
더 좋은 방법이 있습니까? 거의 2048개의 대체 표현식이 있습니다.
Tcl/tk
를 사용하여 10GB 파일을 살펴보고 여는 것이 regexp
더 좋은 생각일까요 ?
내가 사용해야 할까?법률?
답변1
작동해야 하는 것(테스트되지 않음)
보다 일반적인 정규식 사용
sed -i -e 's/(VSS):(F[0-9]+)/\1_\2/g' file.data
여러 표현식을 사용하되 하나의 sed
호출을 사용하세요.
sed -i -e "s/VSS:F31128015/VSS_F31128015/g" -e "s/VSS:F31127969/VSS_F31127969/g" file.data
답변2
Perl은 이와 같은 간단한 텍스트 대체에 적합합니다. ctrl-alt-delor의 답변에 대한 귀하의 의견 스레드에 이어 탐욕을 피할 수 있는 몇 가지 방법이 있습니다. 이 경우 8자리의 정확한 일치를 원하시나요? 의 경우,
perl -i.bak -pe 's/(?<=VSS):(?=F\d{8})/_/' bigfile
이는 둘러보기를 사용하여 밑줄로 변경할 콜론을 찾습니다.
g
사람들은 한 줄에 일치 항목이 1개뿐인 경우에도 종종 이 플래그를 추가합니다. 필요한 경우 추가하세요.