2013-10-29 115 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