2016-07-25 22 views
0

私は自分のファイルに特殊文字が追加されている問題に直面しています。以下同じのスナップ:私は最初の列の数字以外のものを削除するには、次のコマンドを使用してい特殊文字の削除 'sed'

^@<9b>200931350515,test1,910,420032400825443 
^@<9a>200931350515,test1,910,420032400825443 
^@<9d>200931746996,test2,910,420031390086807 

:その上

sed 's/^[^0-9]*//g' file.dat 

ません成功。このファイルは、Teradataからの高速出力中にbtwで作成されます。プロセスは抽出中にいくつかの特殊文字を追加します。

コマンドについての考えはありますか?

+0

1行には常に同じ文字数が追加されますか? –

+2

上記の行に16進数の出力を得ることも良いでしょう(例えば、 'xxd'を使用して) –

答えて

2

行内の任意の非ASCII文字を削除する場合は、trを使用できます。

tr -d '\000\200-\377' <file >file.new 
0

sedは、そのような小さな問題のために大きな銃に各行の先頭を削除する 使用cutです:

2-はあなたが保持するバイトの範囲である、私はわからないんだけど
cut -b 2- file.dat 

どのように多くのそのような奇妙な文字など、あなたがそこに持っているので、私は1-2-3-4-5-を試すだろう

+0

ありがとう@krzyk。私は作成されたファイルが巨大である(> 500GB)と述べるべきだった。また、追加される文字の数は一定ではありません。いくつかの行は4つ、いくつかは6つ、あるものは3つしかありません。 ここでcutは良い選択肢ではありません。巨大なファイルでは実現不可能です。 このような巨大なファイルでもsedに時間がかかります。例:439GBのファイル、同じタイプの操作で4時間かかりました。 – knowone

+0

'cut'はそのような場合には' sed'よりも高速ですが、文字の数が可変でないときはそうです(大規模なファイルを必要とする場合は、通常は正規表現を避けたい場合)。他の良いオプションは 'tr' answer by triplee –

0

それを削除する必要がある文字の数のように見えますすべてのラインで一定です。各行の先頭から一定数の文字を削除するには、単純に行うことができます。

$ sed 's/^.....//' input >output 

必要に応じて点数を調整します。

+1

私は下の投票でコメントをいただければ幸いです。文字は各行の先頭にあり、各行で同じように見えます。私の答えにある 'sed'スクリプトは、各行の先頭から文字を削除します。これに問題はありますか? – Kusalananda

+0

私は同意して文を追加しました。私はそれが皆のために今はっきりしていることを願っています... – hek2mgl

+0

@ hek2mgl編集をありがとう。 – Kusalananda

1

Perlを使って

perl -lne 'print /\d+,.*/g' 

200931350515,test1,910,420032400825443 
200931350515,test1,910,420032400825443 
200931746996,test2,910,420031390086807 

試合はその後、最初のカンマや他のすべて桁まで。

+0

これは不思議に作用しました。ありがとう!! – knowone

関連する問題