저는 대용량 파일(최대 2GB)의 찾기 및 바꾸기 기능을 위해 GNU SED를 사용하고 있습니다.
찾기 및 바꾸기 문자에는 모든 문자가 포함될 수 있으므로 찾기 및 바꾸기 매개변수가 있는 그대로 일반 텍스트로 처리되기를 원합니다.
sed 명령을 사용하여 매개변수를 찾거나 바꾸는 정규식을 처리하고 싶지 않습니다.
나는 많은 실험을 했지만 매번 sed에서 일반 텍스트로 작동하지 않는 새로운 정규식 조합을 얻었습니다.
이것이 어떻게 달성될 수 있습니까?
특수문자를 이스케이프 처리하는 공식이 있나요?
~
참고: 연산자 대신 명령 구분 기호로 연산자를 사용하고 있습니다 ./
아래는 예시입니다
sed -ne "s~^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$~Replace" -ne "w output.txt" "input.txt"
위 명령은 find 매개변수를 정규식(정규식과 마찬가지로)으로 처리하므로 작동하지 않습니다. 따라서 텍스트를 찾으려면 아래와 같이 정규식에서 일부 특수 문자를 이스케이프 처리해야 합니다.
sed -ne "s~\^\[-+\]?\[0-9\]\*\\.?\[0-9\]+(\[eE\]\[-+\]?\[0-9\]+)?\$~Replace" -ne "w output.txt" "input.txt"
.*$
또 다른 예에서는 다음과 같이 수정해야 합니다. .\*\$
그러나 (.*$)
입력을 수정하고 싶지 않습니다.
그렇다면 이스케이프 시퀀스에 대한 보편적인 규칙이 있습니까?
답변1
큐:특수문자를 이스케이프 처리하는 공식이 있나요?
큐:이스케이프 시퀀스에 대한 보편적인 규칙이 있습니까?
ㅏ:/
, .
, *
, ?
, $
등을 입력하는 것만으로도 귀찮은 경우 특수 문자에 해당하는 16진수 코드를 사용할 수 있습니다 . 예를 들어:
sed -rn '/\x22/p' file
은 큰따옴표가 포함된 줄을 인쇄합니다 . 왜냐하면 \x22
presents 입니다 ."
16진수 코드를 찾아야 하는 경우 다음 명령을 사용하여 모든 코드를 파일에 편리하게 저장할 수 있습니다.
gawk 'BEGIN{for(i=0;i<255;i++){printf("%d\t%x\t%c\n", i,i,i)}}' null >chars.txt