문자열(알파벳) 값에 작은따옴표를 추가하는 방법은 무엇입니까?

문자열(알파벳) 값에 작은따옴표를 추가하는 방법은 무엇입니까?

파일의 데이터는 다음과 같습니다

입력 예:

123,xyz,456,abc

모든 문자열에 작은따옴표만 추가하면 됩니다. 먼저 숫자나 문자열을 확인해야 합니다. 첫 번째 항목이 숫자라고 가정하면 쉼표 뒤에 작은따옴표를 추가할 필요가 없으며 다음 문자열에는 작은따옴표를 추가해야 하며 출력은 아래와 같습니다.

123,'xyz',456,'abc'

답변1

echo ,123,xyz,456,,abc2 |
  sed "s/[^,]*[^,0-9][^,]*/'&'/g;s/^,/'',/;s/,$/,''/;:1
       s/,,/,'',/g;t1"
'',123,'xyz',456,'','abc2'

하나 이상의 십진수로 완전히 구성되지 않은 쉼표로 구분된 필드는 따옴표로 묶입니다. 즉, ( /^,/)로 /,$/시작 ,하거나 포함하거나 ( )로 끝나는 줄과 같은 빈 필드 ,,와 숫자가 아닌 숫자( /[^,]*[^,0-9][^,]*/)).

-2, 와 같은 임의의 십진 부동 소수점 숫자를 인식하려면 더 복잡해지며 다음을 사용해야 할 수도 1.23있습니다 .1e-2awk

awk -F, -v OFS=, -v q="'" '
  {
    for (i = 1; i <= NF; i++)
      if ($i !~ /^[[:blank:]]*[-+]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][-+]?[0-9]+)?[[:blank:]]*$/)
        $i = q $i q
    print
  }'

변경 사항은 다음과 같습니다.

abc,,0x20, +2.23E-5 , x  y ,-2

도착하다:

'abc','','0x20', +2.23E-5 ,' x  y ',-2

당신이 얻고 싶다면

'abc','','0x20', +2.23E-5 , 'x  y' ,-2

대신 다음을 수행합니다.

awk -F, -v OFS=, -v q="'" '
  {
    for (i = 1; i <= NF; i++)
      if ($i !~ /^[[:blank:]]*[-+]?([0-9]+\.?[0-9]*|\.[0-9]+)([eE][-+]?[0-9]+)?[[:blank:]]*$/) {
        sub(/[^[:blank:]]/, q "&", $i)
        sub(/^$/, q, $i)
        sub(/.*[^[:blank:]]/, "&" q, $i)
      }
    print
  }'

답변2

sed각 필드의 입력 데이터가 숫자 또는 문자 인 경우 :

sed -E "s/[[:alpha:]]+/'&'/g" <<<"123,xyz,456,abc"

또는 복합 모드에서.

sed -E "s/[0-9]*[[:alpha:]-]+[0-9]*/'&'/g" infile

입력하다:

123,xyz,456,abc
abc123,,a-b,5

산출:

123,'xyz',456,'abc'
'abc123',,'a-b',5

관련 정보