文の終わりの後にある2つのスペースをすべて1つのスペースに置き換える


9

sedコマンドで正規表現を含めることに行き詰まっています。

Q:終わりにある 2つのスペースをすべて1回だけスペースに置き換えたいのですが。

これが私がしたことです:

sed 's/^ $/^$/' file  

そして、文が終わった後、2つのスペースを1つのスペースに置き換えませんでした。

私が得る出力:

This is the output.  Hello Hello

私が欲しい出力:

This is the output. Hello Hello

@Rahul文が終わった後、スペースを1回含む出力が欲しい。最初の文のように2つのスペースではありません。2番目の文を出力したい
Zeus

@Jasenの答えは正しいです。ところで、あなたが試したコマンドは、次のことを意味します:単一のホイットスペースのみで構成される行を空の行に置き換えます。これが、あなたが望んだことをしなかった理由です。
rexkogitans

1
ここに挿入:完全停止後のシングルスペースとダブルスペースの戦争
gerrit

@gerritその戦争は約20年前に失われました。;)
h4ckNinja 2016

回答:


12
 sed 's/\.   */. /g' < file

ドットの後に2つ以上のスペースが続く場合は、ドットの後に1つのスペースが続く場合に置き換えます。


コマンドは実際には段落全体に対して機能します。それがまさに私が欲しかったものです。ありがとう!
Zeus

またはsed -r 's/\.\s+/. /g' fileGNU sedを使用して...
Sundeep

@spasicではsed -Eなくを使用しますsed -r。これは、GNU sedおよび* BSD sed(Mac OS Xを含む)、およびその他の一部で動作します。これはPOSIXに標準で組み込まれる予定です。
cas

@cas私はいつか覚えています。sed -Eこのサイトで動作しなかったが動作した人に提案しました。GNUsed sed -rだけで動作したため、POSIXやその他のバリエーションについては考えていません。 、ありがとう:)
Sundeep

GNU sedの古いバージョンである必要があります。彼らは-Eかなり長い間サポートしてきました(少なくとも2011年以降、manページとinfoページにはまだ言及しているだけです-r
cas

13

あなたのsedコマンド's/^ $/^$/'はあなたが望むことをしません。1つのスペースを含むすべての行を1つの行を含むに置き換えるだけ^$です。

文の終わりを示す文字に応じて、次のことができます。

sed -e 's/\([.?!]\) \{2,\}/\1 /g' <file

これにより.、の後の2つ以上のスペース、?または!1つのスペースのみに置き換えられます。


1
次のように短縮できますsed -r 's/([.?!])\s+/\1 /g' file
Sundeep

ありがとう。しかし、なぜあなたがなぜそんなに多くの丸い、角括弧を使ったのか、親切に説明してくれませんか?それは少し混乱しています。
Zeus

1
@spasic:これはGNU sedでのみ機能し、簡易バージョンで更新されています。
cuonglm 2016

@Zeus:これは、デフォルトのBREでの標準構文です。
cuonglm 2016

1
いいえ、元のsed編集スクリプトは、単一のスペースを含む行をリテラル文字列に置き換えます^$
クサラナンダ

7

これはあなたが探しているかもしれないものです、

tr -s " " <filename

サンプル、

$ echo "This is the output.  Hello Hello" | tr -s "[:blank:]"
This is the output. Hello Hello

使用してsed

$ echo "This is the output.  Hello Hello" | sed 's/\. \+/. /g'
$ echo "This is the output.  Hello Hello" | sed 's/\. \{1,\}/. /g'
This is the output. Hello Hello

2
まあ、それはおかげで動作していますが、私はsedコマンドを含める必要があります。sedの置換、テキストの変更など、上記のようなものを親切に教えてください。
Zeus

2
私はこのtr機能を認識していませんでした
Jasen

3
このアプローチは、文末ではない2つのスペースも置き換えます。
cuonglm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.