안녕하세요 현재 csv 파일 작업 중입니다.
특수 문자를 찾는 데 도움이 되는 bash 명령을 찾고 싶습니다.
?, !, #, *, %
문자 공백도 있습니다.
' '
어떤 제안이라도 도움이 될 것입니다. grep 기능을 사용할 생각이지만 이것이 위 사양에 어떻게 적용될지는 잘 모르겠습니다.
답변1
이것을 시도해 보세요. 찾고 싶은 문자를 둘러싸세요.대괄호 표현[...]
.
grep '[?!#*% ]' infile
다음과 같은 몇 가지 예외가 있습니다.
- if 문자: 문자는 먼저 대괄호 표현식의 문자를 부정하기 때문에 첫 번째 문자가 아닌
^
어디에나 배치할 수 있습니다 .[]
^
- if
]
문자: 이 문자는 대괄호 표현식을 끝내는 데에도 사용되므로 첫 번째 문자여야 합니다. - if
-
문자: 이 문자는 문자 범위를 정의하는 데에도 사용될 수 있으므로 첫 번째 또는 마지막 문자여야 합니다.
발견된 문자로 무엇을 하려는지에 따라 다릅니다:
존재하는 경우 해당 문자만 인쇄
grep -o '[?!#*% ]' infile
다음 문자를 제거하세요.
tr -d '[?!#*% ]' < infile ##or sed 's/[?!#*% ]//g' infile ##or awk '{ gsub(/[?!#*% ]/, "") }1' infile
공백으로 바꾸십시오.
tr '[?!#*% ]' ' ' < infile ##or sed 's/[?!#*% ]/ /g' infile ##or awk '{ gsub(/[?!#*% ]/, " ") }1' infile
다른 문자열로 교체:
sed 's/[?!#*% ]/someString/g' infile ##or awk '{ gsub(/[?!#*% ]/, "someString") }1' infile
그 중 적어도 하나가 발생하는 전체 줄을 인쇄하십시오.
grep --color=none '[?!#*% ]' infile ##or sed '/[?!#*% ]/!d' infile ##or awk '/[?!#*% ]/' infile
등.
답변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