Shell 替换sql文件中括号中的字符串
我需要大量替换许多sql文件中的字符串(最好是在shell中)。我需要替换的字符串看起来像这样的Shell 替换sql文件中括号中的字符串,shell,unix,Shell,Unix,我需要大量替换许多sql文件中的字符串(最好是在shell中)。我需要替换的字符串看起来像这样的(20120408、20120409、20120410),但它可以包含任意数量的空格(但不能包含在数字中)。例如,它可以是 (20120408, 20120409 , 20120410 ) or ( 20120408 , 20120409 , 20120410) 我需要放一些其他的字符串,比如说(XXX)而不是它。支架必须保持不变 提前感谢你的帮助 编辑 让我更具体一点。
(20120408、20120409、20120410)
,但它可以包含任意数量的空格(但不能包含在数字中)。例如,它可以是
(20120408, 20120409 , 20120410 ) or
( 20120408 , 20120409 , 20120410)
我需要放一些其他的字符串,比如说(XXX)而不是它。支架必须保持不变
提前感谢你的帮助
编辑
让我更具体一点。我只需要将上述类型的字符串转换为(xxx)。这意味着数字很重要。我不希望只是两个括号之间的任何东西被更换,所以如果我有(19002344),我不希望它被更换
唯一需要替换的是括号中的三个数字,中间有任意数量的空格
希望这能消除误解。这个怎么样
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
你能粘贴预期的输出吗?您可以看到当前的两个答案在做不同的事情。:)@肯特-正准备添加相同的问题;意识到我对预期的产出一无所知:-)@FredrikPihl我猜。。答案中的第二个输出将是正确的。。。但他不想硬编码那些CSV。猜猜看……对不起,我解释不清楚。我不希望每个号码都被替换。最终结果应仅为(XXX)。如果这些数字在括号内,我只想换一个……这看起来不错。谢谢,我会试试,然后告诉你。是否应该有a/g开关来更改所有实例?我假设每行只有一个实例,但如果有多个实例,则添加g开关并移除锚定,即
^
和$
谢谢,有时一行中可能不止一个,因此我将使用第二个版本。