从 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
我需要在下面的字符串中获取文件名 (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