重击削减不使用标准输入

时间:2018-06-19 14:23:25

标签: linux bash git-bash cut mingw-w64

我正在尝试获取文件路径中的最后4个目录以及文件名。我正在具有MinGW64的Windows机器上执行此操作。显然这没有“ rev”命令,所以我必须自己做:

#!/bin/bash
input="$1"
reverse=""

len=${#input}
for (( i=$len-1; i>=0; i-- ))
do 
  reverse="$reverse${input:$i:1}"
done

printf "$reverse"

如果我执行简单的~/reverse.sh 'hello world'输出:dlrow olleh

,则此方法有效

但是,如果我这样做:     echo $(~/reverse.sh "/c/Users/myusername/5thfolder/4thfolder/3rdfolder/2ndfolder/1stfolder/this_is_my_target_file.sql") | cut -d"/" -f5- 我的输出是这样的: redlofht4/redlofht5/emanresuym/sresU/c/

我希望它会反转输入文件名,然后将该输出(lqs.elif_tegrat_ym_si_siht/redlofts1/redlofdn2/redlofdr3/redlofht4/redlofht5/emanresuym/sresU/c/)剪切。然后cut将采用前5个字段,我将得到输出lqs.elif_tegrat_ym_si_siht/redlofts1/redlofdn2/redlofdr3/redlofht4/ 然后我将能够再次反转以获得我需要的输出。

1 个答案:

答案 0 :(得分:2)

您需要在{p>中使用-f-5而不是-f5-

... | cut -d"/" -f-5

您还可以使用sed来获取文件路径中的最后4个目录以及文件名:

echo "/fff/eee/ddd/ccc/bbb/aaa/file.sql" | sed -r 's|.*(/.*/.*/.*/.*/.*)$|\1|'

将输出

/ddd/ccc/bbb/aaa/file.sql