2016-10-17 5 views
0

'control+M'文字と'\r'文字の違いは何ですか?コントロール+ M文字と ' r'文字の違いは何ですか?そして、どうやってそれを書いていますか?

どちらも同じではありません。 '\ r'と書くように、gawkにcontrol + M文字を書くにはどうすればいいですか?

私の目的はgawkに 'comtrol + M'文字をRS(レコード区切り文字)とすることです。私は上記のコードを使用して取る後

$ grep '\r' raw_file | wc 
    1468 44570 2641642 

$ grep '^M' raw_file | wc 
    1463 44522 2638958 

:我々は

gawk -v RS='\r' 'code goes here' file 

gawk -v RS='\r' -v ORS='\n' '{gsub(/\n/,"",$0)} {print $0}' rawfile > newfile_slashr_removed 
ここ

代わりの'\r'私は'comtrol+M'

背景を撮りたいと書くことができます '\ rを' の

出力をファイルに入れます。

$ grep '^M' WDY_worker_incr_newfile | wc 
     0  0  0 
$ grep '\r' WDY_worker_incr_newfile | wc 
    1464 44570 2640175 

ここでは何が起こっていますか? Ctrlキーその後、V- - はMキーの組み合わせあなたは^Mを書いていない

+0

'printf"^M "| od'は 'printf"と同じものを出力します。 od'。おそらく 'grep -c'ではなく' grep -c'を使うでしょう。 wc' –

+0

なぜあなたはcontrol-Mと '\ r'が違うと思いますか? – Henry

+0

Henry、grepコマンドの結果を同じファイルに表示しました。結果は異なります。 – user6613676

答えて

3

、あなたはCtrlキーを押してください。最初のCtrl-Vを押すと、シェルコマンドラインの編集が次のキーの「エスケープ」になります。通常、Ctrl-MはシェルのReturnと同じアクションにマップされますが、これでコマンドにリテラルのCarriage Returnを入力できますライン。 & AT、近代的なシェル(mkshでM + 'など

を - Ctrlキー V + - これにより

、あなたはその後、をRS=' + Ctrlキーを入力してRS='^M'grep '^M'を書くことができますT ksh93、GNU bashなど)、代わりにRS=$'\r'grep $'\r'と書くこともできます。ドルアポストロフィの引用符はCスタイルのエスケープシーケンスを補間します。

ほとんどのツールを入力すると、'\r'と書くことができます。 printfやtrは例外であり、使用されるオペレーティングシステムやツールによっては、他のものが存在する場合とされない場合があります(例えば、GNU sedはBSD sedよりも多くの場所でそれらを許可します)。

あなたが再したい場合はツールが不正な動作をするので、あなたは、^M^Jは、行区切りではなく、適切なUnix上のような単なる^Jで、Cygwin32のようなDOSベースの環境で、ちょうど注意のもう一つのポイントとして、unixとしてこれをタグ付けが、キャリッジリターンを使用してください。

関連する問題