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

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

我想提取文件的类型,点后面的任何字符串

4

5 回答 5

1

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

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

或者,使用sed

$ sed 's/.*\.//' <<< "$var"
text
于 2013-10-29T16:08:17.287 回答
1

我唯一知道的是它总是包含 log/ 后跟文件名。

我想提取文件的类型,点后面的任何字符串

基于此要求,此行有效:

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

对于您的示例,它输出:

text
于 2013-10-29T16:00:06.827 回答
0

使用awk

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

使用sed

sed 's/.*\.//' file
于 2013-10-29T16:15:16.000 回答
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
于 2013-10-29T16:29:30.253 回答
0

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

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

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

您还可以获取该文本并将其存储在 sed 寄存器中以供以后替换等。这完全取决于您要执行的操作。

于 2013-10-29T16:04:01.077 回答