Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 替换sql文件中括号中的字符串_Shell_Unix - Fatal编程技术网

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

Shell 替换sql文件中括号中的字符串,shell,unix,Shell,Unix,我需要大量替换许多sql文件中的字符串(最好是在shell中)。我需要替换的字符串看起来像这样的(20120408、20120409、20120410),但它可以包含任意数量的空格(但不能包含在数字中)。例如,它可以是 (20120408, 20120409 , 20120410 ) or ( 20120408 , 20120409 , 20120410) 我需要放一些其他的字符串,比如说(XXX)而不是它。支架必须保持不变 提前感谢你的帮助 编辑 让我更具体一点。

我需要大量替换许多sql文件中的字符串(最好是在shell中)。我需要替换的字符串看起来像这样的
(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开关并移除锚定,即
^
$
谢谢,有时一行中可能不止一个,因此我将使用第二个版本。