불다

불다

아래와 같이 문자열이 포함된 변수가 있습니다.

name=@col1, zip_cd=@col2, district=@col3, city=@col4

열 목록이 커질 수 있습니다.

다음 출력이 필요합니다

@col1,@col2,@col3,@col4

답변1

유일한 목표가 변수의 모든 값(즉, 말 그대로 @col1,@col2,@col3,@col4)을 인쇄하는 것이라면 배열을 사용하세요.

$ array=($name $zip_cd $district $city)

산출:

$ oIFS="$IFS" # save IFS for later
$ IFS=","
$ echo ${array[*]}
@col1,@col2,@col3,@col4
$ IFS="$oIFS"`enter code here`

열을 변수에 로드하려면 다음을 인쇄하십시오.

$ line="foo bar qaz qux"
$ oIFS="$IFS" # save IFS for later
$ IFS=" " # space, if $line has spaces/tabs, convert them into single spaces below
$ line=`sed 's/\s\+/ / <<< $line`
$ array=($line)
$ IFS="," # for display
$ echo ${array[*]}
foo,bar,qaz,qux

답변2

$ myvar='name=@col1, zip_cd=@col2, district=@col3, city=@col4'


$ echo $myvar
name=@col1, zip_cd=@col2, district=@col3, city=@col4

$ echo $myvar | awk -F, '{for(i=1;i<=NF;i++){split($i,a,"=");printf("%s,",a[2])}}'
@col1,@col2,@col3,@col4

답변3

당신은 그것을 사용할 수 있습니다 awk:

echo "name=@col1, zip_cd=@col2, district=@col3, city=@col4" | awk 'BEGIN{FS="[^=,]*=";OFS=""} {$1=$1}1'

필드 구분 기호 는 플래그를 포함하여 FS구조의 왼쪽에 설정됩니다 .key=value=

값 뒤에 이미 쉼표가 있으므로 출력 필드 구분 기호는 비어 있습니다.

전체 레코드 에 적용할 합계 {$1=$1}를 트리거합니다 .awkFSOFS

마지막으로 1awk의 기본 작업인 레코드 인쇄가 실행됩니다.

답변4

불다

VAR='name=@col1, zip_cd=@col2, district=@col3, city=@col4'
echo "$VAR" |
while IFS= read -r line
do
   IFS='=,'; set -f; set -- $line
   while case $# in 0 ) break ;; esac
   do
      shift
      printf '%s' "${1}${2+,}"
      shift
      ${1+':'} echo
   done
done

echo "$VAR" |
sed -ne '
   H;g
   :loop
      s/\(\n\)[^=]*=\([^,]*,\{0,1\}\)/\2\1/
   tloop
   P
'

진주

echo "$VAR" |
perl -F'/=|,/' -lpe '
   $_ = join ",", grep { $a++ % 2 } @F;
'

관련 정보