.
은 '모든 문자'sed
의미에서 메타 문자입니다. 특별한 의미를 억제하려면 백 슬래시로 이스케이프 : 당신이 그와 같은 /../
을 제거 후 다른 파일을 참조하는
sed -e 's%/\.\./%/%g' $src_file > $temp_file
참고. 이전과 같은 이름을 사용하려면 (symlink가없는 경우 복잡함), /../
전에 디렉토리 구성 요소를 제거해야합니다. 따라서 :
some/../path/to/file
path/to/file
는 some
가정, 같은 파일을 참조 디렉토리가 아닌 다른 곳에서 심볼릭 링크이지만 (심볼릭 링크가 그 주장을 혼동하는 데 사용할 수 있지만) 일반적으로 some/path/to/file
다른 파일입니다.
$ x="some/../path/to/file
> some/ab/path/to/file
> /some/path/../to/another/../file"
$ echo "$x"
some/../path/to/file
some/ab/path/to/file
/some/path/../to/another/../file
$ echo "$x" | sed -e 's%/\.\./%/%g'
some/path/to/file
some/ab/path/to/file
/some/path/to/another/file
$ echo "$x" | sed -e "s%/\.\./%/%g"
some/path/to/file
some/ab/path/to/file
/some/path/to/another/file
$ echo "$x" | sed -e s%/\.\./%/%g
some/path/file
some/path/file
/some/path/to/another/file
$ echo "$x" | sed -e s%/\\.\\./%/%g
some/path/to/file
some/ab/path/to/file
/some/path/to/another/file
$
참고 echo
명령에서 변수 "$x"
큰 따옴표의주의 사용. 나는 과제에서 싱글 쿼트 또는 더블 쿼트를 사용할 수 있었고 동일한 결과를 얻었을 것입니다.
표준 sed
(및 셸은 /bin/sh
, 별명 : bash
3.2.x) 인 Mac OS X 10.7.4에서 테스트했지만 결과는 모든 시스템에서 동일합니다.
원하는대로 작동하지 않습니다. 또한 원하지 않는 "/ tx /"를 제거합니다. 그 시퀀스 만 "/../"를 "/"로 대체해야합니다. – Niranjan
@Niranjan :'sed' 스크립트에서 작은 따옴표 나 큰 따옴표를 사용하고 있습니까? 그것들은 교환 할 수 없습니다 - 적어도이 문맥에서는 아닙니다. 아니면 여전히 따옴표를 사용하지 않습니까? 작은 따옴표를 사용하지 않으면 더 많은 백 슬래시를 사용해야합니다. 일반적으로 쉘 변수를 보간 할 필요가 없다면'sed' 스크립트를 작은 따옴표로 묶으십시오. –
요나단을 얻었습니다. SED 명령에서 인용 부호를 전혀 사용하지 않았습니다. 귀하의 제안은 작은 따옴표를 사용하도록 제안했습니다. 그 작은 따옴표'sed -e 's %/\. \ ./%/% g'$ {SRC_FILE}> $ {TEMP_FILE} '이 문제를 해결했습니다. 당신의 도움을 주셔서 감사합니다. 고맙습니다. – Niranjan