从 Shell 脚本中的字符串获取文件名

Getting File name from String in Shell Script

我需要在下面的字符串中获取文件名 (IN_INK_GOOGLE_20200519.dat)。我想用 shellscript 来做。此外,由于文件名正则表达式条件 - 应以 IN_INK 开头并以 .dat 结尾,如果匹配不止一次,则仅应打印一场比赛或第一场比赛。可能吗? ,

echo "-sIN.GOOGLE.IN.INK.INNK.INACC\n-i/am/ft/data/INK/out/GOOGLE_INK/INK/out/IN_INK_GOOGLE_20200519.dat\n-o/apps/tnk/in/download/in/IN_INK_GOOGLE_20200519.dat\n-uinnko1\n-end"

一种解决方案是通过管道输入 sed,如下所示:

echo ... | sed -e 's/[.]dat.*/.dat/' -e 's|.*/||'

要使用 "pure shell" 解决方案,请尝试变量扩展的 # 和 % 功能:

e="-sIN.GOOGLE.IN.INK.INNK.INACC\n-i/am/ft/data/INK/out/GOOGLE_INK/INK/out/IN_INK_GOOGLE_20200519.dat\n-o/apps/tnk/in/download/in/IN_INK_GOOGLE_20200519.dat\n-uinnko1\n-end" 

f="${e%%.dat*}.dat";  #strip trailing clutter after first

echo ${f##*/};    #echo just name
echo IN_INK${f##*/IN_INK}  #variation