提取字符后的子字符串

sun*_*737 0 unix linux cut substring sed

我正在尝试提取最后一个句点(点)之后的子字符串。下面的例子。

  • echo "filename..txt" 应该返回“txt”
  • echo "filename.txt." 应该返回“”
  • echo "filename" 应该返回“”
  • echo "filename.xml" 应该返回“xml”

我在下面尝试过。但仅当字符(点)存在一次时才有效。但我的文件名可能有 0 次或多次 (点)。

echo "filename.txt" | cut -d "." -f2
Run Code Online (Sandbox Code Playgroud)

fed*_*qui 5

让我们使用吧awk

awk -F"." '{print (NF>1)? $NF : ""}' file
Run Code Online (Sandbox Code Playgroud)

这会将字段分隔符设置为.并打印最后一个。但如果没有,它会打印一个空字符串。

测试

$ cat file
filename..txt
filename.txt.
filename
filename.xml
$ awk -F"." '{print (NF>1)? $NF : ""}' file
txt


xml
Run Code Online (Sandbox Code Playgroud)