.
的是在sed
意義 '的任何字符' 元字符。爲了抑制它的特殊含義,用反斜槓轉義:
sed -e 's%/\.\./%/%g' $src_file > $temp_file
注意,你指的是不同的文件,你消除/../
這樣了。爲了引用與以前相同的名稱(在沒有符號鏈接的情況下,這會使事情變得複雜),您需要在/../
之前刪除目錄組件。因此:
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'腳本中使用單引號還是雙引號?它們不可互換 - 至少,不是在這方面。或者你還沒有使用任何引號?如果你不使用單引號,你必須使用更多的反斜槓。根據經驗,除非需要插入shell變量,否則將'sed'腳本括在單引號中。 –
得到了點喬納森。我根本沒有在SED命令中使用任何引號。你的建議是建議使用單引號。單引號'sed -e'%/ \。\ ./%/% g'$ {SRC_FILE}> $ {TEMP_FILE}'解決了這個問題。感謝你的幫助。非常感謝你。 – Niranjan