Windows路径转换为Msys2表示的Linux路径

实现功能:

H:\MySpace\PluginConfig

转换为:

/h/MySpace/PluginConfig

实现代码

#!/usr/bin/gawk -f

# bashpath

BEGIN{

#使用sed命令删除0至匹配到以Filesystem开头的所有行

DF = "df -P 2>/dev/null sed '0,/^Filesystem/d'"

#使用getline命令读取下一行内容,并赋给$0、NF、NR、FNR等内置变量(NR Number Of Record In File行号、只有一个文件处理时FNR同NR,若多个文件时NR累加,但FNR从1开始计数)

while ((DF getline) > 0){

#NF代表一行中的记录域个数,因此$(NF)代表最后一个域的字符串

if($(NF) == "/")

pathmap[$1 "/"] = $(NF)

else

pathmap[$1 "/"] = $(NF) "/"

}

close(DF)

pathmap["C:/"] = "/c/"

matched_path = ""

#在AWK中,ARGV代表命令行变元数组,即输入的第一个参数

input_path = ARGV[1]

#替换input_path中所有的\为/

gsub("\\\\", "/", input_path)

#如果input_path没有匹配到\结尾,则在input_path后面追加一个\(!~ 在正则表达式中表示not match . =~ 在正则表达式中表示match)

if (input_path !~ /\/$/)

input_path = input_path "/"

for (pathitem in pathmap){

#如果匹配到input_path以pathitem开头并且pathitem长度大于matched_path时

if ((input_path ~ "^" pathitem) && (length(pathitem)>length(matched_path))){

matched_path = pathitem

}

}

#替换input_path中第一个matched_path为pathmap[matched_path]

sub("^" matched_path, pathmap[matched_path], input_path)

#替换input_path中倒数第一个\为空格,即去除最后一个\

sub(/\/$/, "", input_path)

print input_path

}

扫扫加关注,

小Ⅴ帮带路!

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171209G0PTAK00?refer=cp_1026

相关快讯

扫码关注云+社区