特殊文字とスペース検索

特殊文字とスペース検索

こんにちは現在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. そのうちの少なくとも1つが発生する行全体を印刷します。

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

答え2

上記の1つ以上の文字に一致する行を見つけるには:

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

関連情報