보다 일반적인 정규식 사용

보다 일반적인 정규식 사용

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개뿐인 경우에도 종종 이 플래그를 추가합니다. 필요한 경우 추가하세요.

관련 정보