使用正则表达式替换字符串
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'
我正在尝试替换所有出现的 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'