如何从如下列表中提取成员名称并将其输出到新文件中?
Group-name supernatural
Members admin, Admin1, John, sam, dean
Group-id 405
newfile.txt 的预期输出:
admin
Admin1
John
sam
dean
答案1
$ awk '/^Members/ { for (i=2; i<=NF; ++i) { sub(",$", "", $i); print $i } }' file
admin
Admin1
John
sam
dean
这用于awk
查找以字符串 开头的任何行Members
。当找到这样的行时,它会从第二个字段开始迭代该行的空白分隔字段。每个字段在打印在自己的行上之前都会删除其尾随逗号(如果存在)。
如果您想保存输出,请将输出重定向到新文件,使用
awk ...as above... file >newfile
使用sed
:
$ sed -n '/^Members[[:blank:]]*/{ s///; s/,[[:blank:]]*/,/g; y/,/\n/; p; }' file
admin
Admin1
John
sam
dean
这会找到以该字符串开头的行Members
,然后删除该字符串及其后面的任何空白(制表符或空格)。然后,它会删除该行其余部分中任何逗号后面的空格,并将逗号更改为换行符,然后再打印结果列表。
使用 GNU sed
,您可以结合
s/,[[:blank:]]*/,/g; y/,/\n/; p;
进入
s/,[[:blank:]]*/\n/gp;
答案2
您可以尝试使用以下 awk 和 sed 命令组合
awk '/^Members/{$1=" ";print $0}' filename |sed "s/,/\n/g"| sed -r "s/^\s+//g"
输出
admin
Admin1
John
sam
dean
答案3
用 python 尝试过,效果很好
#!/usr/bin/python
import re
import subprocess
k=re.compile(r'^Members')
y=open('u.txt','r')
for i in y:
if re.search(k,i):
k=re.sub("Members"," ",i)
print re.sub(",","\n",k).strip()
praveen@praveen:~$
输出
admin
Admin1
John
sam
dean
答案4
for member in $(cat /tmp/yourfile.txt | grep Members | cut -d' ' -f2-); do
echo $member | cut -d, -f1
done
结果:
admin
Admin1
John
sam
dean
如果文件中有多个“成员”行,它就会起作用。