我想替换多个转储文件(* .sql):
`this_pattern` varchar(255)
通过
`this_pattern` varchar(100)
即。只有在" this_pattern"就行了。
我尝试过简单:
echo "varchar(255)" | sed -e 's/\(255\)/100/g'
但我不知道如何设置this_pattern
条件。
sed "/^`this_pattern`/ s/\(255\)/100/g"
什么都没做。
感谢您的帮助。
答案 0 :(得分:0)
尝试使用捕获组 ( )
:
$ cat file
`this_pattern` varchar(255)
varchar(255)
$ sed -E '/^`this_pattern`/ s/(varchar)\(255\)/\1(100)/g' file
`this_pattern` varchar(100)
varchar(255)
答案 1 :(得分:0)
echo 'this_pattern varchar(255)' | sed '/^this_pattern.*/ s/varchar(255)/varchar(100)/g'
如果没有-r开关,sed会将圆形的parens视为字符。
如果this_pattern被反引号掩盖,就像在原帖中一样,它有点复杂,但看起来并不合理。但是,我们走了:
echo '`this_pattern` varchar(255)' | sed '/^`this_pattern` .*/ s/varchar(255)/varchar(100)/g'
`this_pattern` varchar(100)
注意:'pattern'和'varchar'和'varchar'和'('等等)之间可能存在变量空格。所以你必须要小心。有时,这是一次性工作,有几十个线条,有时它是一个重复的工作。有时输入具有通用性,并且预期总是看起来相同,有时它是人造的,并且可能不时地有所不同。在进行大量更新时,你必须考虑到这一点。
保留源代码的副本通常是个好主意。通常编辑者允许使用正则表达式,可以进行大规模重命名,但是它们会标记这些位置,以便您可以监视将要进行的更改。