如何用sed替换文件中某些模式的单词?

时间:2014-04-18 08:38:12

标签: regex linux database unix sed

我知道如何用sed替换一个单词。使用

sed -i 's/[old_text]\b/[new_text]/g'

可以用new_text替换old_text。

我想要做的是在数据库模式中用char(10)替换nchar(10)或nchar(10)或nchar(10)....

CREATE TABLE Human
(
    ID int,
    Name nchar(10)  --> should be replace with char(10)
);

这种格式很难确定。

我不知道如何设置sed正则表达式来存档它。

3 个答案:

答案 0 :(得分:2)

你可以在任何地方选择空格:

sed -i.bak 's/\<nchar *( *\([0-9]*\) *)/char(\1)/g' file.sql
  • \<用于字边界。

答案 1 :(得分:0)

或者您可以在vi中打开文件并在vi cmd模式下使用以下内容

%s/nchar/char/g

这会立即替换整个文件

所有出现的nchar都将一次性替换。

在更换所有

之前检查
%s/nchar/char/gc

是的,是的

n不替换

a替换所有

答案 2 :(得分:0)

使用sed和扩展正则表达式-r(为清晰起见)。此外-i表示“就地”,因此无需创建不同的输出文件

sed -i sqlfile -r -e "s/nchar\s*\(\s*([0-9]+)\s*\)/char(\1)/g"