いくつかのファイルを整理し、書き方の一貫性を高めたいと思います。
したがって、私の入力は次のようになります。
$a$h$l)r ^9 ^5リットル \ウルド
問題は、いくつかのスペースが「不要」であり、ファイルの比較が難しくなることです。したがって、次のいずれかの文字の直後にない限り、すべてのスペースを削除したいと思います。
$
^
@
!
/
(
)
たとえば、$<space>
空白を保持する必要があります。
または、スペースが次のいずれかの文字の後の2番目の文字の場合:
i
o
s
=
%
たとえば、iA<space>
スペースは保存されます。では、iC<space><space>
最初のスペースのみを保存できます。
そして別のキャラクターがありますが、
s
<space>
最初または2番目の文字にすることができます。
しかし、追加の困難があります。これらすべての場合、記号または文字はコマンドです。それに続く文字は変数です。コマンド$
の場合も同様です$$
。の場合、最初のドル記号はコマンド、2番目は変数です。したがって、この場合、$$<space>
$ - の後にあっても、後の $ は前の $ の変数なので、スペースを削除する必要があります。これは、最初のリストのすべての「コマンド」に対応します。コマンドの後には常に変数が続きます。したがって、例えば、^$<space>
同様に適用されます。この場合、$は^の変数なので、スペースを削除する必要があります。
2番目のリストの項目とs
2番目のリストの項目の後には、常に2つの変数が続きます。たとえば、2番目のsが変数であるため、ss<space><space>
そうする必要があります。ss<space>
この問題は最初のリストの文字でのみ発生し、2番目のリストのコマンドはコマンドとして機能する文字のs
直後にはないために発生します。
これに加えて、リストされていない他のコマンドがあります。しかし、後ろに空白があることができないので関係ありません。スペース自体がコマンドを構成するわけでもありません。
混乱する可能性があることはわかりますが、答えがあれば喜んで説明します。
したがって、入力の例は次のようになります。
: $$$N $$$a $$$^$私は SLRカメラ *56 長さ 酸素1酸素2 %A%$ v
希望の出力は次のとおりです。
: $$$N $$$a $$$^$i もっと新しく *56リットル 酸素1酸素2 %A%$ v
私はGNU / Linuxオペレーティングシステムを使用しています。
答え1
より良いと思います。最初のバリエーション:
perl -pe 's{([\$^\@!/()].|[ios=%]..)| }{$1}g'
GNU sedと同じ:
sed -E 's#([$^@!/()].|[ios=%]..)| #\1#g'
または携帯用変形:
sed 's#\(\([$^@!/()].\)*\([ios=%]..\)*\) *#\1#g'