替换sql文件中括号中的字符串

时间:2013-03-15 14:57:36

标签: shell unix

我需要批量替换许多sql文件中的字符串(最好是在shell中)。我需要替换的字符串看起来像这个(20120408, 20120409, 20120410),但它内部可以有任意数量的空格(尽管不是数字)。例如,它可以是

(20120408,  20120409   , 20120410 ) or 
(    20120408   , 20120409   ,    20120410)

我需要放一些其他字符串,让我们说(XXX)而不是它。括号必须保留。

提前感谢您的帮助。

EDIT。

让我更具体一点。我只需要上面转换为(xxx)类型的字符串。这意味着数字很重要。我不想要替换两个括号之间的任何东西,所以如果我有(19002344)我不想要它被替换。

唯一需要替换的是括号中的三个数字,中间有任意数量的空格。

希望这清除误解。

1 个答案:

答案 0 :(得分:1)

这是怎么回事?

sed -e 's/20120408/XXX/' -e 's/20120409/YYY/' -e 's/20120410/ZZZ/' input

输出:

(XXX,  YYY   , ZZZ ) or 
(    XXX   , YYY   ,    ZZZ)

或一切一切:

$ sed 's/20120408\|20120409\|20120410/XXX/g' input
(XXX,  XXX   , XXX ) or 
(    XXX   , XXX   ,    XXX)

<强>更新

$ cat input
(    20120408,  20120409   , 20120410 )
( 20120408,  20120409   , 19002344 )

$ sed 's/^(\s*20120408\s*,\s*20120409\s*,\s*20120410\s*)$/(xxx)/' input
(xxx)
( 20120408,  20120409   , 19002344 )

以上假设每行一个条目;如果有几个使用这个:

sed 's/(\s*20120408\s*,\s*20120409\s*,\s*20120410\s*)/(xxx)/g' input