Bash 배열로 읽어야하는 file.txt가 있습니다. 그런 다음 공백, 큰 따옴표 및 모든 항목에서 첫 번째 쉼표를 제외한 모든 항목 을 제거해야합니다 . 내가 얼마나 멀리 왔는지 :
$ cat file.txt
10,this
2 0 , i s
30,"all"
40,I
50,n,e,e,d,2
60",s e,e"
$ cat script.sh
#!/bin/bash
readarray -t ARRAY<$1
ARRAY=( "${ARRAY[@]// /}" )
ARRAY=( "${ARRAY[@]//\"/}" )
for ELEMENT in "${ARRAY[@]}";do
echo "|ELEMENT|$ELEMENT|"
done
$ ./script.sh file.txt
|ELEMENT|10,this|
|ELEMENT|20,is|
|ELEMENT|30,all|
|ELEMENT|40,I|
|ELEMENT|50,n,e,e,d,2|
|ELEMENT|60,se,e|
쉼표 상황을 제외하고는 잘 작동합니다. 이 고양이를 스킨하는 방법에는 여러 가지가 있다는 것을 알고 있지만이 부분이 포함 된 더 큰 스크립트로 인해 매개 변수 대체를 사용하여 여기에 도달하고 싶습니다.
|ELEMENT|10,this|
|ELEMENT|20,is|
|ELEMENT|30,all|
|ELEMENT|40,I|
|ELEMENT|50,need2|
|ELEMENT|60,see|
매개 변수 대체를 통해 가능합니까?
배열에로드 sed
하기 전에 using 제거해야하는 항목을 제거 합니다 (또한 소문자 변수 이름에 유의하십시오. 일반적으로 쉘 스크립트에서 대문자 변수를 사용하지 않는 것이 가장 좋습니다).
#!/bin/bash
readarray -t array< <(sed 's/"//g; s/ *//g; s/,/"/; s/,//g; s/"/,/' "$1")
for element in "${array[@]}";do
echo "|ELEMENT|$element|"
done
그러면 예제 파일에 다음과 같은 출력이 생성됩니다.
$ foo.sh file
|ELEMENT|10,this|
|ELEMENT|20,is|
|ELEMENT|30,all|
|ELEMENT|40,I|
|ELEMENT|50,need2|
|ELEMENT|60,see|
정말로 매개 변수 대체를 사용해야하는 경우 다음과 같이 시도하십시오.
#!/bin/bash
readarray -t array< "$1"
array=( "${array[@]// /}" )
array=( "${array[@]//\"/}" )
array=( "${array[@]/,/\"}" )
array=( "${array[@]//,/}" )
array=( "${array[@]/\"/,}" )
for element in "${array[@]}"; do
echo "|ELEMENT|$element|"
done
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다