如何使用sed替换包含第二个分隔符的一组分隔符字符串之间的字符串?

时间:2015-07-22 17:46:23

标签: parsing sed

如何用sed替换一组分隔符字符串之间的字符串?第一个分隔符是一个不被替换的字符串;第二个分隔符是一个char,但需要替换为替换的一部分。

FIRST_DELEM="GetVal(" 
SECOND_DELEM=”,”
Example string:
abc = param.GetVal((m_AstringToReplace, xml_SomeData, StringParameter(L""));

要替换或删除的字符串=(m_AstringToReplace,

以下sed命令只解析字符串,不会替换它。

sed -e 's/.*GetVal(\(.*\),.*/\1/'

如何使用sed替换使用这些复杂分隔符的字符串?

1 个答案:

答案 0 :(得分:0)

以此为输入:

$ cat file
abc = param.GetVal((m_AstringToReplace, xml_SomeData, StringParameter(L""));

这将替换紧跟在GetVal(之后开始并以第一个逗号结束的字符串:

$ sed -re 's/(GetVal[(])[^,]*,/\1REPLACEMENT/' file
abc = param.GetVal(REPLACEMENT xml_SomeData, StringParameter(L""));

正则表达式(GetVal[(])会将第一个分隔符捕获到第1组。[^,]*,匹配所有后续并包含第一个逗号,的内容。

请注意,如果我们使用.*,代替[^,]*,,那么我们会在字符串中将所有内容与 last 逗号进行匹配。

在替换的替换部分,\1恢复第一个分隔符,即我们想要保留的分隔符。以下所有内容都是替换,无论你想要什么。