문제

인용된 텍스트를 파일에서 쉘 변수로 어떻게 분리합니까?
또한:다음으로 시작하는 줄을 어떻게 무시하나요? '#'?

텍스트 파일이 있다고 가정 해 보겠습니다.

8723 "full name" "more data here"
#5002 "another name" "bla bla bla"
7129 "single" blablabla
3910 noquote "bla bla bla"

그리고 실행되는 스크립트를 작성하고 싶습니다.

#!/bin/sh
myscript <KEY> "<FULL NAME>" "<MORE DATA>"

텍스트 파일의 각 줄에 대해.
쉽게 말하면 텍스트 파일의 FULLNAME 및 MOREDATA가 단일 단어로 구성된 경우에도 항상 따옴표로 묶인다고 가정할 수 있습니다.


나는 간단한 것을 시도했다

#!/bin/sh
while read key name extra
do
    echo "myscript $key \"$name\" -- \"$extra\""
    #myscript $key "$name" "$extra"
done < list.txt

그러나 단일 쉘 변수에서 따옴표 안의 값을 그룹화하지 않습니다.
출력은 다음과 같습니다

myscript 8723 ""full" -- "name" "more data here""
myscript #5002 ""another" -- "name" "bla bla bla""
myscript 7129 ""single"" -- "blablabla"
myscript 3910 "noquote" -- ""bla bla bla""

대신에 나는 얻고 싶다.

myscript 8723 "full name" -- "more data here"
myscript 7129 "single" -- "blablabla"
myscript 3910 "noquote" -- "bla bla bla"

물론 추가할 수도 있어요 myscript 원본 텍스트 파일의 모든 줄에 해당 파일을 스크립트로 만들거나 C 그걸 할 수 있는 프로그램...

도움이 되었습니까?

해결책

#!/bin/sh
while read key name extra
do
    eval myscript $key $name $extra
done <(grep -v "^#" list.txt)

다른 팁

sed -e '/^[^#]/s/^/myscript /' list.txt

편집하다:실행하려면:

sed -e '/^[^#]/s/^/myscript /' list.txt | bash
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top