각 줄의 첫 번째 단어를 선택하고 bash 스크립트에서 배열에 속성을 지정하는 방법

각 줄의 첫 번째 단어를 선택하고 bash 스크립트에서 배열에 속성을 지정하는 방법

":" 문자 앞에 있는 텍스트 파일의 각 줄의 첫 번째 단어를 선택하여 배열(1줄 1슬롯)로 출력하는 bash 스크립트를 만들고 싶습니다.

이제 나는 이것을 가지고 있습니다 :

while read p; 
do
  arr+=$p | sed -r 's///'
done <test.txt

sed 조건에 무엇을 넣어야 할지 모르겠습니다.

이 정규식이 있습니다.

/^([^:])+/gm

답변1

서브쉘과 sed가 필요 없으며 매개변수 확장만 사용하면 됩니다.

while read p ; do
  arr+=( "${p%%:*}" )
done < test.txt

하나의 명령으로 모든 하위 문자열을 제거하는 것이 더 빠를 수 있습니다.

while read p ; do
    arr+=("$p")
done < test.txt
arr=("${arr[@]%%:*}")

답변2

bash버전 4 이상의 경우 readarray다음을 사용하여 배열을 직접 읽을 수 있습니다.

readarray -t arr < <( awk -F ':' '{ print $1 }' file.in )

코드 awk는 프로세스 교체에서 실행되고 데이터를 제공합니다. :각 행의 첫 번째 필드 만 추출합니다 .

file.inas 의 예

roses are:red
violets:are blue
sugar is:sweet and
so:are
you:.
$ readarray -t arr < <( awk -F ':' '{ print $1 }' file.in )
$ printf '"%s"\n' "${arr[@]}"
"roses are"
"violets"
"sugar is"
"so"
"you"

관련 정보