首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Windows路径转换为Msys2表示的Linux路径

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

作者头像
企鹅号小编
发布2018-01-08 19:26:34
2.7K0
发布2018-01-08 19:26:34
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

实现功能:

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

}

本文来自企鹅号 - V主宰媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - V主宰媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档