添加:在第一列之后使用sed或awk

时间:2016-07-26 21:47:24

标签: awk sed

我的配置文件类似于文本:

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

2 个答案:

答案 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/