":" 문자 앞에 있는 텍스트 파일의 각 줄의 첫 번째 단어를 선택하여 배열(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.in
as 의 예
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"