2011-06-15 65 views
18

我需要用選項卡替換斜槓字符,以便我可以使用awk提取目錄名稱。替換/使用sed選項卡

/path/to/some/USEFUL_INFORMATION/in/some/path 

我試過這樣做,但它所做的只是在我的輸出中輸入「t」。

sed -e 's/\//\t/g' filename 

任何幫助,將不勝感激。

+0

這似乎取決於'sed'的版本。試試'tr'/''\ t'<文件名>,看看會發生什麼。 – Beta 2011-06-15 19:58:23

+0

您不需要用'TAB'替換'/'並將其提供給'awk'。 'awk'可以簡單地自行完成。 – ssapkota 2011-06-15 20:05:15

+1

想想吧,'cut -f5 -d'/' Beta 2011-06-15 20:15:10

回答

0

使用+分隔符 sed -e 's+/+\t+g

echo 'path/to/something' | sed -e 's+/+\t+g' 

// path  to  something 

編輯: 一個更簡單的方法來提取一個文件的路徑:

dirname /path/to/file.txt 
#output /path/to 
+0

你沒有重現錯誤,是嗎? – Beta 2011-06-15 19:55:19

+0

@貝塔你是對的,它適用於我這兩個 – 2011-06-15 20:05:07

13

嘗試awk

awk '{gsub("/","\t",$0); print;}' filename 
+0

這完美的工作。謝謝! – 2011-06-15 20:26:17

+1

@蘭斯,如果有效,那麼不要忘記接受答案。 – ssapkota 2011-06-15 20:36:08

+0

這是這裏唯一的答案,在我的OS X上工作 – 2016-09-19 11:10:16

0

看一看dirnamebasename

$ dirname /path/to/some/USEFUL_INFORMATION/in/some/path 
/path/to/some/USEFUL_INFORMATION/in/some 

$ basename /path/to/some/USEFUL_INFORMATION/in/some/path 
path 

AWK可以處理任何分隔,例如/

$ echo /path/to/some/USEFUL_INFORMATION/in/some/path | awk -F"/" '{print $5}' 
USEFUL_INFORMATION 
29

首先,您可以使用其它字符作爲分隔符s///。該命令

sed 's:ABC:DEF:g' 

等同於

sed 's/ABC/DEF/g' 

它會使你的命令更具可讀性,因爲你沒有逃跑的斜線。

說的是,有些seds不支持字符轉義,如\t。例如,它在我Mac OS X中發生了很多。我的解決辦法是按Ctrl + V,然後將標籤字符:

sed 's:/:<Control+V><TAB character>:g' 

在我的機器,結果是:

$ pwd 
/Users/brandizzi/sandbox/demo/mydemo 
$ pwd | sed 's:/:  :g' 
    Users brandizzi sandbox demo mydemo 

但是,如果你的目的是把所有的路徑目錄中的awk變量$1$2等剛剛宣佈斜線是字段分隔符使用awk -F標誌:

$ pwd 
/Users/brandizzi/sandbox/demo/mydemo 
$ pwd | awk -F/'{print $3 " " $5}' 
brandizzi demo 
+2

感謝您的:爲Mac提示。 – Jesse 2012-03-07 16:02:03

+0

同上。正是我在找的東西。 – DGrady 2012-10-29 18:47:29

+1

它也可以在Mac OS X上按'^ V^I' – MichK 2013-07-03 07:51:53

1

AWK -F '/' '{打印$ 5}' your_file

這將打印USEFUL_INFORMATION

它定義了字段分隔符爲/。請注意,由於您的字符串以/開頭,因此第一個字段爲空,因此您的字段數將比您想象的多一個。

5

我找到了答案,對我來說,here。我有MacOSX,所以我使用Control + v,然後是Control + i。

sed -e 's/\/[CTR+V][CTR+I]/g' filename 
0

首先像其他人建議的那樣,使用另一個字符作爲分隔符。其次,使用$'\t'以外的的報價。實施例與;作爲分隔符:

$ echo "/path/to/some/USEFUL_INFORMATION/in/some/path" | sed -e 's;/;'$'\t'';g' 
path to some USEFUL_INFORMATION in some path 
+0

這是什麼版本的sed在* NIX平臺上運行? – 2015-08-25 23:17:05

1

嘗試把雙引號(」「)內,而不是單引號(」「),如以下所示的命令。

sed -i "s/\//\\t/g" filename

一般我們用雙引號(」「)與sed的,當我們正在處理的特殊字符。

與你的情況一樣,你還沒有逃過TAB字符(\ t)中的\

2

要使用TAB使用的sed替換/:

sed 's/\//\'$'\t/g' filename.txt 

通常,標籤(\ t)和換行之前的地方\ '$'(\ n)的字符。在bash中工作。

要提取目錄名稱:

就個人而言,我會使用grok12的答案。

awk -F'/' '{print $5}' filename.txt