인용된 텍스트를 파일에서 쉘 변수로 어떻게 분리합니까?
-
07-09-2020 - |
문제
인용된 텍스트를 파일에서 쉘 변수로 어떻게 분리합니까?
또한:다음으로 시작하는 줄을 어떻게 무시하나요? '#'
?
텍스트 파일이 있다고 가정 해 보겠습니다.
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
제휴하지 않습니다 StackOverflow