2016-03-29 9 views
0

私はこの作業を行うためにsedを使用します。ここにスクリプトがあります:N個のスペースの開始番号をN + 2個のスペースの番号に置き換えるにはどうすればよいですか?

sed 's/^( )([^ ]+)$/\1 \2/g' -i main.js 

これは機能しません。これは、エラーINFOMATIONです:

sed: 1: "s/^( )([^ ]+)$/\1 ...": \1 not defined in the RE 
+0

'-r'オプションを入れてみると、キャプチャグループをエスケープする必要はありません。 –

+0

'-r'ではなく拡張正規表現' -E'オプションです – ruibin

+0

'-r'はGNU sed専用です。 –

答えて

1

基本はBREを使用して、あなたは(をエスケープする必要があり、)+

sed 's/^\(  \)\([^ ]\+\)$/\1 \2/g' -i main.js 

または

sed 's/^\([[:blank:]]\+\)/\1 /' main.js 
+0

考えて、それは動作します! – ruibin

1

をsedをするのであなたがキャプチャを必要としませんグループ。あなたがあなたの代わりに全試合を繰り返したい場合は、&を使用することができます。

sed -i 's/^  /& /' main.js 

これは関係なく、それらが続いているものを6つのスペースで始まる任意の行に二つのスペースを追加します。ここではgフラグが定義通り意味をなさないことに注意してください。この置換は1行に1回しか発生しません。

あなたは唯一の非空白が続く6つの空白で始まる行に二つのスペースを追加したい場合は

、あなたはまだキャプチャし、バックリファレンスよりも少し短い

sed -i '/^ \{6\}[^ ]/s/^ \{6\}/& /' main.js 

を使用することができます。アドレス(最初の/.../式)を使用します。つまり、それに続くコマンドはアドレスに一致する行に対してのみ実行されます。実際のコマンドはsで始まり、通常の置換になります。

+0

わかりにくいです。置換フラグ 's'が真ん中にあり、'/' – ruibin

+0

@ruibinが多すぎますので、いくつかの説明を追加します。 –

関連する問題