0

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

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

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

在此先感谢您的帮助。

编辑。

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

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

希望这能消除误解。

4

1 回答 1

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
于 2013-03-15T15:03:09.783 回答