정규식 awk에서 쉼표를 제외한 모든 구두점을 제거하는 정규식

정규식 awk에서 쉼표를 제외한 모든 구두점을 제거하는 정규식

변수가 있어요

 local= "[  'service center','New'  ]"

다음 awk 코드를 사용하여 대괄호와 작은따옴표를 제거하고 있습니다.

 local=gensub(/[\[\]']+/, "", "g", local);

예상되는 O/P는 다음과 같습니다.

local ="  service center,New  "

내가 작성한 코드가 작동하지 않습니다

답변1

쉼표를 구두점이 아닌 문자로 바꾸고, 나머지 구두점 문자를 제거하고, 쉼표를 복원할 수 있습니다.

awk -v  local="[  'service center','New'  ]" '
  BEGIN {
    gsub(/,/, SUBSEP, local)
    gsub(/[[:punct:]]/, "", local)
    gsub(SUBSEP, ",", local)
    printf("local=\"%s\"\n", local)
  }'
local="  service center,New  "

여기서는 다음과 같은 내장 SUBSEP 변수를 사용하고 있습니다.GNU awk 매뉴얼그러므로:

기본값은 awk 프로그램이나 대부분의 입력 데이터에 나타날 가능성이 없는 인쇄되지 않는 문자를 포함하는 SUBSEP문자열입니다."\034"

답변2

아래 명령을 찾으십시오. 정상적으로 작동합니다.

cat filename
local= "[  'service center','New'  ]"

sed "s/[^a-zA-Z,= \" ]//g"  filename
output: local= "  service center,New  "


Command:  sed "s/[^a-zA-Z,= \" ]//g" filename

관련 정보