2014-02-05 4 views
1

아래의 grep 명령의 출력을 각 행의 변수로 설정하는 데 도움이 필요합니다.Bash에서 While 루프의 변수 설정

while read line; do 
     grep -oP '@\K[^ ]*' <<< $line 
    done < tweets 

위는이 같은 원하는 표시

lunaluvbad

Mags_GB

등등 ... 나는 그런 짓을 할 경우

:

while read line; do 
     usrs="grep -oP '@\K[^ ]*' <<< $line" 
    done < tweets 

    echo $usrs 

이상한 결과를 보여 주며, 내가 찾던 결과가 아닙니다. 위에서 언급 한 내용을 표시하려면 $ usrs가 필요합니다. 예 :이 같은

lunaluvbad

Mags_GB

+0

http://stackoverflow.com/help/someone-answers을 읽고 질문에 대답하는 사람들에게 신용을 제공하십시오. –

답변

2

루프가 필요 없습니다. 어쨌든 입력의 라인을 통해 grep 의지 루프 :

usrs=$(grep -oP '@\K[^ ]*' tweets) 
+0

이것은 내가 원하는 것을 거의 보여 주지만 출력은 자체 회선에 표시되지 않습니다. 모든 단어는 그 자체의 줄에 있어야합니다. 어떤 아이디어있어? – RydallCooper

+1

@RydallCooper 변수를 출력 할 때 따옴표를 사용하십시오 :'echo "$ usrs"' – tom

+1

@RydallCooper : 출력을 원한다면'grep -oP '@ \ K [^] *'tweets' 만 있으면됩니다. 산출물에 대한 추가 처리 작업을 원할 경우 수행하려는 작업을 알려주십시오. –

2

만들기 BASH 배열의 사용과 command substitution :

users=() 
while read -r line; do 
    users+=("$(grep -oP '@\K[^ ]*' <<< "$line")") 
done < tweets 

또는 다른 process substitution 사용 :

users=() 
while read -r line; do 
    users+=("$line") 
done < <(grep -oP '@\K[^ ]*' tweets) 

printf "%s\n" "${users[@]}"