2017-10-17 87 views
0

我有一个新版本的moinmoin wiki宏,我已经安装了Color2,现在颜色声明出现在内容之后。例如,在此之前,它看起来像是声明“我饿了”,并带有白色文字颜色:MoinMoin宏语法位置开关er-oo

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

现在,它已被更改。他们交换了它,因此颜色后宣布内容:

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

语法可以得到比这更复杂一些,但对我们来说,这是最经常以这种方式使用。

我在我的wiki中有大约400页的内容,我真的很想做一个颜色声明switch-er-oo。最好,我想找到的所有实例<<Color2(white,*)>><<Color2(*,white)>>再次用红,黄,蓝替换它们,然后等

但是,这是一个有点超出我的grep sed的awk技能。有没有任何主人友善而且足够熟练地向我展示如何快速完成这项工作?

UPDATE:

我是能够使基于菲利普的建议甜美的脚本:

#!/bin/sh 

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

exit 0 

这优雅的捕捉大多数情况下,相当可靠的(那些颜色从文本用逗号分隔,这不是全部,顺便说一句)。再次感谢Philipp。下面是语法,如果我们将脚本命名为“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

谢谢菲利普!这很好地解决了一个警告:我们需要在sed命令末尾加上'g',因为这个字符串当然会出现多次。我知道的很多。 'sed's/Color2(white,\([^)] * \))/ Color2(\ 1,white)/ g'/ tmp/t'。我只想知道你是如何将查找字符串的子集声明为第一个变量的。我认为这与你逃过的那个括号有关系? – sivacrom

+0

我认为只有在字符串中多次发现模式时才需要/ g,因为sed处理每个字符串,而不是整个文本。至于第二个问题,那么答案是“是”,它被称为“匹配组”,您要求sed记住括号之间的匹配部分。你可以在模式中有几个,然后通过\ 1 \ 2 ...来引用它们。 –