NetBSD의 특정 텍스트 파일 줄에서 특정 단어 가져오기

NetBSD의 특정 텍스트 파일 줄에서 특정 단어 가져오기

아래와 같은 목록에서 멤버 이름을 추출하여 새 파일로 출력하려면 어떻게 해야 하나요?

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

파이썬으로 시도해 보았는데 훌륭하게 작동합니다.

#!/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

파일에 "members" 줄이 여러 개 있으면 작동합니다.

관련 정보