日志输出行如下所示
HLGAPL65.HOU150.CHEVRONTEXACO.NET/UPSTREAM_MDM_D2/Jobs/Keystone 版本2.0.2.0/0.0。 Loading_SOR_to_Landing / EGI / EGI_WV_WELLHDR.pjb
我需要提取在最后一个" /"之后出现的名称。在" .pjb"
之前在这种特殊情况下 - 所需名称为EGI_WV_WELLHDR。
最有效和最简单的方法是什么?
答案 0 :(得分:2)
您可以使用此awk
:
$ awk -F"[/.]" '{print $(NF-1)}' file
EGI_WV_WELLHDR
-F"[/.]"
将分隔符设置为点或斜线。{print $(NF-1)}
根据这些字段分隔符打印倒数第二个字段。如果您想要的是没有扩展名的文件名,那么您可以执行以下操作:
请参阅:
$ awk '{print $NF}' file
Loading_SOR_to_Landing/EGI/EGI_WV_WELLHDR.pjb
$ t=$(basename $(awk '{print $NF}' a))
$ echo "$t"
EGI_WV_WELLHDR.pjb
$ echo ${t%.*}
EGI_WV_WELLHDR
答案 1 :(得分:2)
尝试使用此sed命令,
$ sed -r 's/^.*\/([^.]*)\.pjb$/\1/g' file
EGI_WV_WELLHDR
-r
- >扩展正则表达式。
^.*\/([^.]*)\.pjb$
以上正则表达式获取最后/
和.pjb
之间的字符。然后通过反向引用打印组中提取的字符。
答案 2 :(得分:2)
使用sed
,运行以下命令:
sed -r 's/.*\/([^\/]+)\.pjb/\1/g' logfile
答案 3 :(得分:1)
使用cut
和rev
:
rev | cut -d'/' -f1 | cut -d'.' -f2 | rev
答案 4 :(得分:0)
由于您的分隔符是斜杠,因此您可以使用basename
:
$ basename "HLGAPL65.HOU150.CHEVRONTEXACO.NET/UPSTREAM_MDM_D2/Jobs/Keystone Release 2.0.2.0/0.0. Loading_SOR_to_Landing/EGI/EGI_WV_WELLHDR.pjb" .pjb
EGI_WV_WELLHDR