2010-11-18 5 views
0

間の空白を削除します。SEDは、私はその行のようになります。xmlファイルを持つ文字

<item id=""><myname>FIRST NAME" myURL="http://etc.com</myurl></item> 

残念ながら、それらのほとんどは、B /トンで、ホワイトスペースの異なる量で、次のようになります。

<item id=""><myname>FIRST NAME"     
     myURL="http://etc.com</myurl></item> 

を私は/ Bで作業SEDは空白のために置き換えるように見えることはできませんt文字

+0

あなたのXML に不正な形式れる - これは意図的なものですか? –

+0

いいえ、申し訳ありません!一定。 –

+0

最後の行に改行があるか、またはスペースが多いために折り返されていますか? –

答えて

0
sed '/myname>.*\"\s*$/N;s|\"\s*\n*\s*myURL=\"|</myname><myurl>|' file.xml 

この最初の行は不完全であるかどうかをテストします。そうであれば、次の行をパターンスペースに配置します。いずれの場合も、元のテキストを目的のテキストに置き換えます。

私は文字セットのパターンスペースで改行を一致させる方法を誰かに教えてもらえれば分かります。例えば、上記式の\s*\n*\s*ではなく、[\s\n]*となります。

入力:

<item id=""><myname>FIRST NAME" myURL="http://etc.com</myurl></item> 
<item id=""><myname>FIRST NAME"     
     myURL="http://etc.com</myurl></item> 
<item id=""><myname>FIRST NAME" myURL="http://etc.com</myurl></item> 

出力:

<item id=""><myname>FIRST NAME</myname><myurl>http://etc.com</myurl></item> 
<item id=""><myname>FIRST NAME</myname><myurl>http://etc.com</myurl></item> 
<item id=""><myname>FIRST NAME</myname><myurl>http://etc.com</myurl></item> 
1

正規表現's/ */ /g'あなたが探しているのは?

2つ以上のスペースのすべての文字列では、これは1つのスペースで置き換えられます。

+1

これは、最初のスラッシュとアスタリスクの間の3つのスペースです(見やすいです)。 –

+0

''/s/+// g''(最初のスラッシュとプラス記号の間の2つのスペース - このサイトで強調表示されているコードは、質問/回答投稿とコメントのために異なって動作するようです...) '*'は直前の文字が任意の回数(0を含む)出現できることを示しますが、 '+ 'は「1つ以上」を意味します。 – David

+0

私はまた、 's/[\ t] +// g''を時々使うのが好きです。実際には何回も繰り返される空白やタブを1つの空白文字で置き換えます。注意: 'sed -r'は通常' \ t'をサポートしますが、 '-P'を宣言することによって' grep'に** Perl正規表現**を明示的に使用する必要があります。 – David

関連する問題