2012-09-13 4 views
0

Bash 스크립트 파일에서 .. 문자를 제거해야합니다. 예 : 나는 그것은를 대체bash 스크립트에서 문자열에서 바꾸는 방법은 무엇입니까?

DUMMY_STRING=/../ 
TEMP_FILE=./temp.txt 
sed s%${DUMMY_STRING}%/%g ${SRC_FILE} > ${TEMP_FILE} 
cp ${TEMP_FILE} ${SRC_FILE} 

코드 아래 사용했다가

some/path/to/file 
some/ab/path/to/file 

과 같아야 후

some/../path/to/file 
some/ab/path/to/file 

그리고 대체 :

내가 좋아하는 일부 문자열이 1 호선의 /../; 두 번째 줄에서 /ab/ 줄을 제거합니다. 이것은 바람직하지 않습니다. 일부 정규식으로 /../을 고려하고 /ab/이이 정규식과 일치하는 것으로 알고 있습니다. 하지만 그 중 /../ 만 교체하면됩니다.

몇 가지 도움을주십시오.

감사합니다,

NN

답변

3

.은 '모든 문자'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에서 테스트했지만 결과는 모든 시스템에서 동일합니다.

+0

원하는대로 작동하지 않습니다. 또한 원하지 않는 "/ tx /"를 제거합니다. 그 시퀀스 만 "/../"를 "/"로 대체해야합니다. – Niranjan

+0

@Niranjan :'sed' 스크립트에서 작은 따옴표 나 큰 따옴표를 사용하고 있습니까? 그것들은 교환 할 수 없습니다 - 적어도이 문맥에서는 아닙니다. 아니면 여전히 따옴표를 사용하지 않습니까? 작은 따옴표를 사용하지 않으면 더 많은 백 슬래시를 사용해야합니다. 일반적으로 쉘 변수를 보간 할 필요가 없다면'sed' 스크립트를 작은 따옴표로 묶으십시오. –

+0

요나단을 얻었습니다. SED 명령에서 인용 부호를 전혀 사용하지 않았습니다. 귀하의 제안은 작은 따옴표를 사용하도록 제안했습니다. 그 작은 따옴표'sed -e 's %/\. \ ./%/% g'$ {SRC_FILE}> $ {TEMP_FILE} '이 문제를 해결했습니다. 당신의 도움을 주셔서 감사합니다. 고맙습니다. – Niranjan

관련 문제