NIS
组文件的格式为
group1:*:100:bat,cat,zat,ratt
group2:*:200:rat,cat,bat
group3:*:300:rat
以:
作为分隔符,需要从第4列中删除确切的字词(例如rat
)。应该删除该单词的任何前导或尾随,
以保留第4列中的逗号分隔值格式
预期输出:
group1:*:100:bat,cat,zat,ratt
group2:*:200:cat,bat
group3:*:300:
答案 0 :(得分:2)
你最好使用awk来完成这项工作。试试这个(GNU awk):
awk 'BEGIN {OFS=FS=":"} {gsub (/\yrat,?\y|\y,?rat\y/, "", $4)}1' file
使用:
作为字段分隔符,gsub
会删除第4个字段中的所有rat
。 \y
用于字边界,以便rat
匹配但不匹配rrat
。
答案 1 :(得分:1)
如果perl
解决方案没问题:
修改样本输入以添加更多相关案例..
$ cat ip.txt
group1:*:100:bat,cat,zat,ratt
group2:*:200:rat,cat,bat
group3:*:300:rat
group4:*:400:mat,rat,sat
group5:*:500:pat,rat
$ perl -F: -lane '(@a) = split/,/,$F[3]; $F[3] = join ",", grep { $_ ne "rat" } @a; print join ":", @F' ip.txt
group1:*:100:bat,cat,zat,ratt
group2:*:200:cat,bat
group3:*:300:
group4:*:400:mat,sat
group5:*:500:pat
-F:
在:
上拆分输入行并保存到@F
数组(@a) = split/,/,$F[3]
在,
分割第4列并保存到@a
数组$F[3] = join ",", grep { $_ ne "rat" } @a
删除@a
数组中与rat
完全匹配的元素,将这些元素与,
结合并修改输入行的第4个字段print join ":", @F
打印由@F
:
数组元素
高尔夫球以避免临时阵列@a
$ perl -F: -lane '$F[3] = join ",", grep { $_ ne "rat" } split/,/,$F[3]; print join ":", @F' ip.txt
在第4列使用正则表达式:
$ perl -F: -lane '$F[3] =~ s/,rat\b|\brat(,|\b)//g; print join ":", @F' ip.txt
group1:*:100:bat,cat,zat,ratt
group2:*:200:cat,bat
group3:*:300:
group4:*:400:mat,sat
group5:*:500:pat
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/\brat\b,?//g' file
删除一个或多个单词rat
,后跟可能的,
。
答案 3 :(得分:0)
awk 'NR>1{sub(/rat,*/,"")}1' file
group1:*:100:bat,cat,zat,ratt
group2:*:200:cat,bat
group3:*:300: