2017-05-10 6 views
0

で二重の空白を折りたたむ:私は必要なもの単語間の空白を削除し、私は次のテキスト持っバッシュ

T h i s i s s o m e t e x t . 

を以下の通りです:

This is some text. 

構造規則的なパターンに従いますので、私は」 dシェルコマンドを使って必要な変更を行う方法があると仮定します(ある種のスクリプトでも可能です)。私はシェルツールに堪能ではないので、うまくいくものを考え出すことができませんでした。

ありがとうございます! sedので

+0

をこれを文字列で保存していますか?すなわち、i/pファイルの文字列またはコンテンツ – Inian

+0

@OP:[このデモをチェックできますか](http://ideone.com/OsBMS2)、これが適切な出力であるかどうかを確認してください。 – anubhava

答えて

3

Perlを救出する:

perl -pe 's/ (?!)//g' -- input.txt 
  • (?!は全体のパターンが意味を意味し、 "負の先読みアサーション" であり、空白がない空白
+0

DOTの前に2つのスペースがある場合、出力に1つのスペースが残ります。 – anubhava

+0

@anubhava:確かに、2つのスペースが1つに縮小され、1つのスペースが削除されます。 – choroba

+0

OPの出力ごとに両方のスペースを削除しないでください。 – anubhava

3

あなたが行うことができます。

$ echo "$a" 
T h i s i s s o m e t e x t . 

$ sed 's/\(.\) /\1/g' <<< "$a" 
This is some text. 
+0

[このデモを見る](http://ideone.com/OsBMS2)コメントは複数のスペースを含む文字列を入力するとかなり悪いものです。 – anubhava

+0

@anubhava:3つ以上の連続したスペースがある場合、OPが何を起こそうとしているのか分かりません。 – user000001

2

sedまたはperlのバリアントは、これを行うための簡単な方法です。ここで

は、一例としてawk変種です:

$ awk -F'[ ]' '{for(i=1;i<=NF;i++){if ($i=="") $i=" "; printf "%s", $i}}' <<< 'T h i s i s s o m e t e x t .' 
This is some text. 

$ awk -F'[ ]' '{for(i=1;i<=NF;i++){if ($i=="") $i=" "}}1' OFS= <<< 'T h i s i s s o m e t e x t .' 
This is some text. 
2

あなたはこのヌーを使用することができるが、ワード境界に基づいているのsed:

s='T h i s i s s o m e t e x t .' 

sed -E 's/\b(+\B|)//g' <<< "$s" 

出力:

This is some text. 
関連する問題