我的配置文件类似于文本:
BACKUP=nfs://NASserver/vol/FS01/share/
我需要在//之后提取字段,但在第一列之后添加: 像这样:
NASserver:/vol/FS01/share/
我试过了:
cat file.conf |awk -F"//" /BACKUP/'{print $2}'|awk -F"/" '{print $1":""/"$2"/"$3"/"$4}'
工作和生产:
NASserver:/vol/FS01/share/
但是,这将适用于NAS名称需要打印$ 5的情况,它将无效:
含义:例如,如果BACKUP字符串包含第5个或更多,那么我的awk将不起作用
即
BACKUP=nfs://NASserver/vol/FS01/share/folder1/folder2
如何在任何长度的BACKUP字符串中使用awk获得相同的结果 我会得到
NASserver:/full volumes path
答案 0 :(得分:0)
如果你的格式是固定的,请说:" BACKUP = nfs://...."那么下面的代码将适用于任何长度
cat file.conf | sed 's#BACKUP=nfs://\([^/]\+\)\(.*\)#\1:\2#g'
如果,您的格式可能会有所不同,我的意思是例如:" FTP = ftp://...",然后
cat file.conf | awk -F'//' '{print $NF}' | sed 's#^\([^/]\+\)\(.*\)$#\1:\2#g'
答案 1 :(得分:0)
awk 单一解决方案,已在gawk v5.0.0上进行了测试。
在假设您每行只有1个“ //”实例并且对接下来的内容感兴趣的情况下工作。使用管道。
awk -F"//" '{print $2}' file.conf | awk 'BEGIN{FS="/";OFS="/"}{$1 = $1":"; print}'
输出:
NASserver:/vol/FS01/share/