특수문자 및 공백 검색

특수문자 및 공백 검색

안녕하세요 현재 csv 파일 작업 중입니다.

특수 문자를 찾는 데 도움이 되는 bash 명령을 찾고 싶습니다.

 ?, !, #, *, %

문자 공백도 있습니다.

' '

어떤 제안이라도 도움이 될 것입니다. grep 기능을 사용할 생각이지만 이것이 위 사양에 어떻게 적용될지는 잘 모르겠습니다.

답변1

이것을 시도해 보세요. 찾고 싶은 문자를 둘러싸세요.대괄호 표현[...].

grep '[?!#*% ]' infile

다음과 같은 몇 가지 예외가 있습니다.

  • if 문자: 문자는 먼저 대괄호 표현식의 문자를 부정하기 때문에 첫 번째 문자가 아닌 ^어디에나 배치할 수 있습니다 .[]^
  • if ]문자: 이 문자는 대괄호 표현식을 끝내는 데에도 사용되므로 첫 번째 문자여야 합니다.
  • if -문자: 이 문자는 문자 범위를 정의하는 데에도 사용될 수 있으므로 첫 번째 또는 마지막 문자여야 합니다.

발견된 문자로 무엇을 하려는지에 따라 다릅니다:

  1. 존재하는 경우 해당 문자만 인쇄

    grep -o '[?!#*% ]' infile
    
  2. 다음 문자를 제거하세요.

    tr -d '[?!#*% ]' < infile              ##or
    sed 's/[?!#*% ]//g' infile             ##or
    awk '{ gsub(/[?!#*% ]/, "") }1' infile
    
  3. 공백으로 바꾸십시오.

    tr '[?!#*% ]' ' ' < infile             ##or
    sed 's/[?!#*% ]/ /g' infile            ##or
    awk '{ gsub(/[?!#*% ]/, " ") }1' infile
    
  4. 다른 문자열로 교체:

    sed 's/[?!#*% ]/someString/g' infile   ##or
    awk '{ gsub(/[?!#*% ]/, "someString") }1' infile
    
  5. 그 중 적어도 하나가 발생하는 전체 줄을 인쇄하십시오.

    grep --color=none '[?!#*% ]' infile    ##or
    sed '/[?!#*% ]/!d' infile              ##or
    awk '/[?!#*% ]/' infile
    
  6. 등.

답변2

언급한 문자 중 하나 이상과 일치하는 줄을 찾으려면 다음을 수행하세요.

grep '[ !?#*%]' file.csv  # looks for space, !, ?, #, *, %  into file.csv and shows matching lines

참고: 일부 문자는 특정 위치에 있어야 합니다(예: "[ac]"는 "a, - 또는 c"가 아니라 "a, b 또는 c"를 찾습니다).

grep이 작동할 로케일도 지정해야 합니다. 일반적으로 C 로캘입니다. 이는 특정 로케일(utf-8 이전 변형의 경우)이 지정된 범위(있는 경우)를 엉망으로 만드는 것을 방지하는 데 도움이 됩니다.

csv 파일에서 "문자, 숫자 또는 쉼표를 제외한 모든 문자와 일치하는 행"을 찾으려면(쉼표를 구분 기호로 사용한다고 가정하고, 그렇지 않으면 실제로 사용하는 구분 기호를 변경하면 됩니다):

LC_ALL=C grep '[^a-zA-Z0-9,]' file.csv
  # and if you also accept doubleqhotes in that csv:
LC_ALL=C grep '[^a-zA-Z0-9,"]' file.csv
  # and if instead of comma you use TAB as a separator
LC_ALL=C grep "[^a-zA-Z0-9$$(printf '\t')]\"" file.csv
  -or-
LC_ALL=C grep "[^a-zA-Z0-9$$(printf '\t"')]" file.csv

관련 정보