2016-08-23 3 views
0

私はタブ区切りのデータファイルを持っているとしましょう。私は、ファイル内のすべてのタブを1つの空白文字に変換したいと思います。テンポラリファイルなしで同じファイルに出力リダイレクト

$ cat junk 
John Doe 35 New York 
Bob Smith 24 Boston 
Jane Doe 31 Los Angeles 

これを行うには、expandコマンドを使用できます。私はこのようにそれを行う場合:

$ expand -t 1 junk > junk 

それがジャンクファイルを壊しますし、すべてのデータが失われます。最も簡単な解決策は、もちろん、出力を一時ファイルにリダイレクトしてから、一時ファイルの出力を元のファイルにリダイレクトすることです。これは次のようになります。

$ expand -t 1 junk > temp 
$ cat temp > junk 
$ rm temp 
$ cat junk 
John Doe 35 New York 
Bob Smith 24 Boston 
Jane Doe 31 Los Angeles 

これはあまりにも面倒です。一度にすべてをやるために使うことができる簡単な方法があるのでしょうか?

+0

これは、処理されている行のすべてのタブ文字(つまり、最初のタブ文字だけではありません)を置換します(g)。ファイル全体を配列などに読み込み、メモリ内で処理して同じファイルに書き戻すことができます。しかし、それははるかに面倒です。 – GMichael

+0

[ファイルを消去せずにリダイレクトする方法cat cat myfile> myfile](http://stackoverflow.com/questions/21492189/how-to-redirect-without-erasing-file-cat-myfile-myfile) – Inian

答えて

3

あなたはsedをGNUを(おそらくそうであるように、質問がlinuxタグ付けされている)がある場合(バックアップ接尾辞を提供していない限り)、あなたはその一時ファイルを削除し、その-iまたは--in-placeオプションを使用することができます。

s(代替)コマンドを使用して、各タブをスペースで置き換えます。

+0

一般化された形の質問の特定の部分は重複している。 –

関連する問題