我有不同的位置,但他们都有一个模式:
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/
后跟文件名。
我想提取文件的类型,无论字符串在点
之后出现答案 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