如何在特定单词后的行尾提取字符串

时间:2013-10-29 15:53:01

标签: bash grep

我有不同的位置,但他们都有一个模式:

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

只是为了告诉你我不知道它们是什么,用户输入这些位置,所以我不知道用户输入了什么。我唯一知道的是它总是包含log/后跟文件名。

我想提取文件的类型,无论字符串在点

之后出现

5 个答案:

答案 0 :(得分:1)

  

我只知道总是包含log /后跟名称   该文件。

     

我想提取文件的类型,无论字符串是什么   在点

之后

基于此要求,此行有效:

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

对于您的示例,它输出:

text

答案 1 :(得分:1)

您可以使用bash内置字符串操作。下面的示例将从输入字符串中提取最后一个点之后的所有内容。

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

或者,使用sed

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

答案 2 :(得分:0)

不是最干净的方式,但这会起作用

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

无论如何,这是它的sed模式,不确定你是否在变量中有该字符串,或者你是否正在从文件中读取等。

您也可以抓取该文本并存储在sed寄存器中以便以后替换等。所有这些都取决于您要做的事情。

答案 3 :(得分:0)

使用awk

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

使用sed

sed 's/.*\.//' file

答案 4 :(得分: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