10

一部のファイルから非ASCII文字を削除したい。私はすでにこれらの多くの正規表現を試しました。

sed -e 's/[\d00-\d128]//g'  # not working

cat /bin/mkdir | sed -e 's/[\x00-\x7F]//g' >/tmp/aa

ただし、このファイルにはASCII以外の文字が含まれています。

[root@asssdsada ~]$ hexdump /tmp/aa |more
          00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F  0123456789ABCDEF

00000000  45 4C 46 B0 F0 73 38 C0 - C0 BC BC FF FF 61 61 61  ELF..s8......aaa
00000010  A0 A0 50 E5 74 64 50 57 - 50 57 50 57 D4 D4 51 E5  ..P.tdPWPWPW..Q.
00000020  74 64 6C 69 62 36 34 6C - 64 6C 69 6E 75 78 78 38  tdlib64ldlinuxx8
00000030  36 36 34 73 6F 32 47 4E - 55 42 C8 C0 80 70 69 42  664so2GNUB...piB
00000040  44 47 BA E3 92 43 45 D5 - EC 46 E4 DE D8 71 58 B9  DG...CE..F...qX.
00000050  8D F1 EA D3 EF 4B 86 FC - A9 DA 79 ED 63 B5 51 92  .....K....y.c.Q.
00000060  BA 6C FC D1 69 78 30 ED - 74 F1 73 95 CC 85 D2 46  .l..ix0.t.s....F
00000070  A5 B4 6C 67 DA 4A E9 9A - 4B 58 77 A4 37 80 C0 4F  ..lg.J..KXw.7..O
00000080  F3 E9 B2 77 65 97 74 F9 - A2 C0 F2 CC 4A 9C 58 A1  ...we.t.....J.X.
4

5 に答える 5

20

これはでは機能しないようですsed。おそらくtrしますか?

tr -d '\200-\377'

または補足で:

tr -cd '\000-\177'
于 2013-02-28T11:36:05.273 に答える
8

試しましたか

cat /bin/mkdir | tr -cd "[:print:]"

私はそれが問題を解決すると思いますか?

テキストコンテンツのみに興味がある場合は、次を使用することもできます

cat /bin/mkdir | strings
于 2013-07-18T15:33:11.643 に答える
3

ファイルが現在使用しているエンコーディングを知っていますか? その場合は、iconv を使用して変換できます。ある文字エンコーディングから別のエンコーディングに変換するユーティリティです。したがって、元のファイルが UTF-8 であり、ASCII に変換する場合は、次を使用できます。

iconv -f utf8 -t ascii <inputfile>

入力ファイルの file コマンドは、現在のエンコーディングを教えてくれるかもしれません。

興味深いことに、 encaというコマンドがあり、ファイルの内容の言語がわかっている場合に、使用されている文字エンコーディングを決定するために最善を尽くします。

この他の質問が答えかもしれません。

于 2013-02-28T10:56:49.417 に答える
1

ここで提供される解決策は私にはうまくいきませんでした。おそらく私の問題は異なっていたのでしょうが、純粋な ASCII テキストから ASCII の色やその他の文字を削除する必要がありました。

ただし、以下は私にとってはうまくいきました:

ASCII テキストからのエスケープ コードの除去

sed -E 's/\x1b\[[0-9]*;?[0-9]+m//g'

コンテキスト内 (BASH):

$ printf "\e[32;1mhello\e[0m\n"
hello

$ printf "\e[32;1mhello\e[0m\n" | cat -vet
^[[32;1mhello^[[0m$

$ printf "\e[32;1mhello\e[0m\n" | sed -E 's/\x1b\[[0-9]*;?[0-9]+m//g' | cat -vet
hello$
于 2020-05-22T00:20:41.983 に答える