添加:在带有sed或awk的第一列之后

添加:在带有sed或awk的第一列之后,awk,sed,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名称需要打印

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

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的情况下,这将起作用,但不起作用:

含义:例如,如果备份字符串包含第5个或更多字段,则此my awk将不起作用

i、 e

对于任意长度的备份字符串,如何使用awk获得相同的结果 我会得到

NASserver:/full volumes path

如果您的格式是固定的,请说:“备份=nfs://....“那么以下代码适用于任何长度

cat file.conf | sed 's#BACKUP=nfs://\([^/]\+\)\(.*\)#\1:\2#g'
如果,您的格式可能会有所不同,例如:“FTP=ftp://...”“那么


awkoneliner解决方案,在gawk v5.0.0上测试

假设每行只有一个“/”实例,并且您对下面的内容感兴趣。使用管道

awk -F"//" '{print $2}' file.conf | awk 'BEGIN{FS="/";OFS="/"}{$1 = $1":"; print}'
输出:

NASserver:/vol/FS01/share/

无需使用awk
cat
您的文件:
awk-F'/'{print$NF}file.conf | sed的#^\([^/]\+\\(.*)$\1:\2#g'
awk -F"//" '{print $2}' file.conf | awk 'BEGIN{FS="/";OFS="/"}{$1 = $1":"; print}'
NASserver:/vol/FS01/share/