使用正则表达式替换字符串

Replacement of string using Regex

我正在尝试替换所有出现的 convert(string1,string2) to CAST(<String2> AS <String1>)

输入字符串如下:

Insert Into `Collaboration`.`SR_SearchResult`(SearchLinkID,PWUserID,SearchRank) 
        Select distinct lnk.SearchLinkID, Convert(varchar(10),@PWUserID) ,Convert(varchar(10),@rank) from `Collaboration`.`SR_SearchLink` lnk (nolock)
        inner join `Collaboration`.`SR_SearchTag` tg (nolock) on lnk.SearchLinkID = tg.SearchLinkID         
        WHERE @strSearch

所需的输出字符串:

Insert Into `Collaboration`.`SR_SearchResult`(SearchLinkID,PWUserID,SearchRank) 
        Select distinct lnk.SearchLinkID, CAST(@PWUserID AS varchar(10)) ,CAST(@rank AS varchar(10)) from `Collaboration`.`SR_SearchLink` lnk (nolock)
        inner join `Collaboration`.`SR_SearchTag` tg (nolock) on lnk.SearchLinkID = tg.SearchLinkID         
        WHERE @strSearch

我从我这边尝试了很多但无法做到这一点。请帮助我。

假设您正在使用 Java,您可以使用以下正则表达式:convert\((.+?),(.+?)\) 并像这样使用它(示例 here):

String str = "Insert Into Collaboration.SR_SearchResult(SearchLinkID,PWUserID,SearchRank) Select distinct lnk.SearchLinkID, Convert(varchar(10),@PWUserID) ,Convert(varchar(10),@rank) from Collaboration.SR_SearchLink lnk (nolock) inner join Collaboration.SR_SearchTag tg (nolock) on lnk.SearchLinkID = tg.SearchLinkID\n" +
"WHERE @strSearch";
        System.out.println(str.replaceAll("Convert\((.+?),(.+?)\)", "CAST( AS )"));

产量:

Insert Into Collaboration.SR_SearchResult(SearchLinkID,PWUserID,SearchRank) Select distinct lnk.SearchLinkID, CAST(@PWUserID AS varchar(10)) ,CAST(@rank AS varchar(10)) from Collaboration.SR_SearchLink lnk (nolock) inner join Collaboration.SR_SearchTag tg (nolock) on lnk.SearchLinkID = tg.SearchLinkID
WHERE @strSearch

通过sed.

$ sed 's/\bConvert(\([^,]*\),\([^)]*\))/CAST( AS )/gi' file
Insert Into Collaboration.SR_SearchResult(SearchLinkID,PWUserID,SearchRank) Select distinct lnk.SearchLinkID, CAST(@PWUserID AS varchar(10)) ,CAST(@rank AS varchar(10)) from Collaboration.SR_SearchLink lnk (nolock) inner join Collaboration.SR_SearchTag tg (nolock) on lnk.SearchLinkID = tg.SearchLinkID
WHERE @strSearch

要保存所做的更改,您需要添加 -i 参数,例如 sed -i 's//gi'i 修饰符有助于进行不区分大小写的匹配。

认为你要找的是:

sed 's/Convert(\(.*\),\(.*\))/CAST( AS )/g'