2017-10-17 7 views
0

私がインストールしたColor2というmoinmoin wikiマクロの新しいバージョンがあります。今では色の宣言が内容の後に来ます。MoinMoinマクロの構文position switch-er-oo

<<Color2(white,I am hungry)>> 

さて、それは変更されています:例えば、前に、それは白のテキストの色で、「私は飢えている」、宣言するために、このように見えました。色はコンテンツの後宣言されているので、彼らはそれを切り替える:

<<Color2(I am hungry,white)>> 

を構文はこれよりも少し複雑になりますことができますが、我々の場合には、それはほとんどの場合、このように使用されています。

私は本当に色の宣言switch-er-ooをしたい私のwikiに約400ページのコンテンツを持っています。好ましくは、私はなど、<<Color2(white,*)>>のすべてのインスタンスを見つけて、赤、黄、青と再び<<Color2(*,white)>>に置き換えるとする

が欲しいしかし、これは少し私ののgrepを超えて、をsedのawkスキルどのようにこれをすばやく行うことができるかを私に見せるために親切で熟練したマスターがいますか?

UPDATE:

私はフィリップの提案に基づいて甘いスクリプトを作ることができた:これはエレガントかなり確実に(ほとんどの状況を捉え

#!/bin/sh 

cat $1 | sed 's/Color2(\([^)]*\),\([^)]*\))/Color2(\2,\1)/g' 

exit 0 

色はコンマでテキストから区切られている場合、それら、それらのすべてではない、BTW)。ありがとう、フィリップス。スクリプトの名前を "script.sh"とすると、構文は次のようになります。script.sh /path/to/text_file.txt > /path/to/new_file.txt

答えて

0

超洗練されていないかもしれませんが、(whiteの場合)動作します。あなたが計画したことをしたい場合は、whiteを別の色に置き換えてください。わかりませんが、フォーマットがどのように異なっているかもしれませんが、コマンドの調整が必要な場合があります。だから、この解決法があなたのために働かないかどうか、私たちに知らせて、人々がより良い返答をすることができるようにしてください。

cat /tmp/t 
<<Color2(white,I am hungry)>> 

sed 's/Color2(white,\([^)]*\))/Color2(\1,white)/' /tmp/t 
<<Color2(I am hungry,white)>> 
+0

ありがとうございます!これは1つの注意点ではうまくいきます:sedコマンドの最後に 'g'が必要です。なぜなら、この文字列は何度も現れるからです。それほど私は知っている。 'sed 's/Color2(白、\([^)] * \))/ Color2(\ 1、白)/ g'/tmp/t'を指定します。検索文字列のサブセットを最初の変数として宣言できたのはどういうことかを知りたいだけです。あなたはあなたが逃げた括弧と何か関係があると思いますか? – sivacrom

+0

sedは文字列全体ではなく各文字列を処理するので、パターンが文字列内で複数回見つかった場合にのみ/ gが必要だと思います。そして2番目の質問については、答えは "はい"です。それは "マッチンググループ"と呼ばれ、括弧の間に一致する部分を覚えておいてください。パターンの中にいくつかを入れて、\ 1 \ 2 ...などで参照することができます。 –