こんにちは現在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
そのうちの少なくとも1つが発生する行全体を印刷します。
grep --color=none '[?!#*% ]' infile ##or sed '/[?!#*% ]/!d' infile ##or awk '/[?!#*% ]/' infile
など。
答え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