2015-06-24 35 views
0

我在使用bash外殼。如何使用文件替代斜線的sed

我有一個文件的文件列表:

cat filelist 
    ../1.txt 
    ../2.txt 
    ... 
    ../100.txt 

我想刪除「../」,我試圖$ cat filelist | sed s/..\/// ,但它給出了一個錯誤信息。我如何刪除斜槓?

+0

你會想逃離'.'s。 – Biffen

回答

1

您需要報價:所以你要逃避它太

sed 's/..\///' 

.指任何字符:

sed 's/\.\.\///' 

和可讀性,您可以使用另一個字符分隔符:

sed 's|\.\./||' 
+0

也許'^'他的請求缺少(我猜)在OP失敗sed – NeronLeVelu

+0

@NeronLeVelu:顯然不是。主要問題是bash解釋這些反斜槓 - 將被調用的命令改爲「sed s /..///' - 這是不正確的。 –

+0

評論的目的不是錯誤本身,但事實上,OP似乎刪除相對於當前批處理文件夾引用的uppter文件夾,而不是包含'../'的路徑(所以使用*也許*和+1) – NeronLeVelu

0

使用備用隔板。

您還可以使用-i標誌編輯就地文件。

sed -i 's|^\.\./||g' filelist 
+1

'-i'會改變OP做得非常激烈的行爲。 – Biffen

+0

@Biffen;真的,解釋。 – beerbajay

1

您需要周圍的sed參數報價和還需要包括g全局標誌。它也沒有必要先cat文件。你也應該逃過這段時間。

用途:

sed 's/\.\.\///g' filelist 

給出:

1.txt 
2.txt 
... 
100.txt 
+0

'g'不需要。 – 123

1

除去起始../(我猜它的目的,但不指定)

sed 's#^\.\./##' filelist 
  • 逃脫點,以避免正則表達式通過#意味着
  • 改變默認的分隔/允許readible /在路徑
  • 添加^限制起始路徑不改變像bad/../folder。如果不是想要的行爲,只要刪除這個插入符號。
  • 直接使用文件從sed的(無需貓與SED在這種情況下)