SED에서 파일 경로를 이스케이프 처리하는 방법은 무엇입니까?


39

나는 대체하려는 $fileWithPath에서 $file그러나이 경로가 탈출하지 않습니다 (내 생각) 때문에 작동하지 않습니다. 그것을 탈출하는 방법?

sed -i 's/${fileWithPath}/HAHA/g' $file

답변:


71
sed -i 's|'$fileWithPath'|HAHA|g' file

작은 따옴표는 문자열 리터럴을 정의합니다. 변수를 리터럴 외부에두면 쉘이 해당 부분을 확장 할 수 있습니다.

또한 경로를 구문 분석하려면 sed 명령에서 디렉토리 구분 기호 "/"와 혼동하지 않는 구분 기호를 사용하십시오.


1
$fileWithPath공백 이 있으면 잘못된 패턴이 삽입됩니다.
Lekensteyn

파일 경로의 구분 기호를 변경하는 것에 대한 보너스 팁은 생명의 은인이었습니다!
Shadoninja

나는 당신의 명령에 너무 많은 따옴표가 있다고 생각합니다. 내 예가 효과가있는 sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn것 같습니다.
Léo Léopold Hertz 준영

14

슬래시가있는 리터럴 문자열에 대한 더 좋은 방법 :

sed -i "s|my/path|my/other/path|g" myFileOfPaths.txt

이 사람은 오스카가 가치가 있습니다! 간단하고 우아한
Toan Nguyen

14

대체 문자열 또는 패턴 문자열에 슬래시가 포함 된 경우 GNU sed가 대체 명령에 대한 대체 분리 문자를 허용한다는 사실을 사용할 수 있습니다. 분리 문자에 대한 공통 선택은 파이프 문자 | 또는 해시 # -구분 문자의 최선의 선택은 종종 처리되는 파일 유형에 따라 다릅니다. 당신의 경우에 당신은 시도 할 수 있습니다

sed -i 's#'$fileWithPath'#HAHA#g' $file

첫 번째 항목 만 변경 한 다음 'g'를 제거해야하는 경우 마지막 # 뒤의 문자 'g' 는 파일의 모든 항목을 변경하는 데 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.