搜索特殊字符和字符空间

搜索特殊字符和字符空间

您好,我目前正在处理 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. ETC。

答案2

要查找至少与您提到的字符之一匹配的任何行:

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

注意:某些字符需要位于特定位置(例如:“[ac]”查找“a、b 或 c”,而不是“a、- 或 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

相关内容