あまりにも多く、あまりにも少ない空白文字を修正するには?

あまりにも多く、あまりにも少ない空白文字を修正するには?

他の人が編集したファイルがあります。これには次の行が含まれています。

<E> This is text </E>

私はいくつかのBashシェルスクリプトを使用して、これらのテキスト行に対して一連のテキスト置換機能を実行します。ただし、テキストの置き換えが機能するには、フォーマットが完全に正確である必要があります。それはほとんど事実ですが、私がこのファイルを受け取るエディタがスペルエラーを犯さないとは確かに期待できません。

フォーマットの一部には前後に<E>スペースがあります</E>。それ以上も以下でもない。したがって、次は正しくありません。

<E>This is text </E>
<E> This is text</E>
<E> This is text     </E>
<E>   This is text </E>

私はsed使用できることを知っています特定問題は前の2つのスペースと同じです(私が扱っているテキストにも文字が含まれているので代わりに</E>使用されます)。#//

sed -i '$ s#  </E>#" </E>#g' *.txt

...しかし、未知の番号を検索するためにどのように使用するのかわかりません。また、空白がない場合は、隣接する文字<E>または</E>任意の文字がある可能性があります。

最も重要なのは、空白がなく、テキストとラベルを区切る2つ以上のスペースを持つインスタンスを検索して1つのスペースに変換するには<E>どうすればよいですか?</E>

ベストアンサー1

sed -e 's!<E> *!<E> !g' -e 's! *</E>! </E>!g'

(注:私は正規表現の区切り記号の!代わりに#またはを使用します。個人的な好みです。)/

sed-e各コマンドの前にこのフラグが付いている限り、複数のコマンドを渡すことで入力に対して実行できます。

上記の正規表現では、末尾の空白は*「0個以上の空白文字と一致」を意味します。マニュアルre_formatページでは、この種の複製に関する詳細情報を提供します。

後ろに「」が続く原子は、その*原子に一致する項目が0個以上含まれるシーケンスと一致します。後に「」が続く原子は、+その原子が1回以上現れる順序と一致します。後ろに「」が続く原子は、その?原子に対して0または1つの一致と一致します。

*ここで「atom」は+または前のサブパターンです?


あなたの例では、次のコマンドを実行してくださいsed

reedm@www:/tmp $ cat > example.txt
<E>This is text </E>
<E> This is text</E>
<E> This is text     </E>
<E>   This is text </E>
reedm@www:/tmp $ sed -e 's!<E> *!<E> !g' -e 's! *</E>! </E>!g' example.txt 
<E> This is text </E>
<E> This is text </E>
<E> This is text </E>
<E> This is text </E>

おすすめ記事