2013-10-29 114 views
0

我有不同的位置後如何提取在行尾的字符串,但他們都有一個規律:特定單詞

some_text/some_text/some_text/log/some_text.text 

所有位置不一樣的東西開始,他們沒有相同數量的子目錄,但我對僅在log/之後發生的事感興趣。我想提取.text

編輯的問題:

我有很多的位置:

/s/h/r/t/log/b.p 
/t/j/u/f/e/log/k.h 
/f/j/a/w/g/h/log/m.l 

只是爲了顯示你,我不知道他們是什麼,用戶輸入這些位置,所以我不知道用戶輸入什麼。只有我知道的是,它總是包含日誌/後跟文件的名稱。

我想提取文件的類型,無論串點

+0

因此,給定一個文件路徑'..../log/something.otherthing'你想要'其他'嗎? – fedorqui

+0

看編輯的問題請 – user2864207

+0

@fedorqui你明白我的問題 – user2864207

回答

1

的只有我自己知道後談到的是,它總是包含日誌/其次是名稱的文件的 。

我想提取文件的類型,在此基礎上要求的點

後的任何字符串來 ,這條線的工作原理:

grep -o '[^.]*$' file 

爲你的榜樣,它輸出:

text 
+0

謝謝。這有助於 – user2864207

0

不是最乾淨的方式,但是這將工作

sed -e "s/.*log\///" | sed -e "s/\..*//" 

這是它的SED模式,無論如何,不​​知道你是否有一個變量字符串,或者如果你從文件中讀取等

你也可以搶該文本並存儲在一個sed寄存器中以備後續替換等。所有這一切都取決於您正在嘗試執行的操作。

+0

字符串在變量 – user2864207

+0

然後它會像new_variable = $(echo $ variable | sed -e「s /.* log \ ///」| sed -e「s /\..*/ /「)...那是在KShell中......讓我試試Bash ..是的,在兩者都有效 –

1

您可以使用bash內置的字符串操作。下面的示例將提取輸入字符串中最後一個點之後的所有內容。

$ var="some_text/some_text/some_text/log/some_text.text" 
$ echo "${var##*.}" 
text 

或者,使用sed

$ sed 's/.*\.//' <<< "$var" 
text 
0

使用awk

awk -F'.' '{print $NF}' file 

sed使用

sed 's/.*\.//' file 
從這個結構的根
0

運行:

/s/h/r/t/log/b.p 
    /t/j/u/f/e/log/k.h 
    /f/j/a/w/g/h/log/m.l 

這似乎是工作,你可以跳過echo命令,如果你真的只是想的文件類型,沒有他們原來的地方的記錄。

$ for DIR in *; do 
    > echo -n "$DIR " 
    > find $DIR -path "*/log/*" -exec basename {} \; | sed 's/.*\.//' 
    > done 
    f l 
    s p 
    t h