用新标识符替换16位数标识符

时间:2018-04-08 20:26:53

标签: linux bash shell sed

我想用shell变量" NEW_IDENTIFIER"中定义的新生成的标识符替换文件中现有的16位数字标识符。

SEARCH_PATTERN="g_ExistingMachineID"
NEW_IDENTIFIER="456EFABC-4567-546C-B4E2-DA2F45AE2CD3"

g_ExistingMachineID[] = _T( "{123ABCDE-1234-312C-B4E2-0E5F15BD1CA9}" )

所需输出

g_ExistingMachineID[] = _T( "{456EFABC-4567-546C-B4E2-DA2F45AE2CD3}" )

我使用g_ExistingMachineID作为搜索模式获得了所需的行,但无法获得正则表达式以使用存储在NEW_IDENTIFIER中的值替换123ABCDE-3640-430C-B4E2-0E6F75AF6CA9。

我正在阅读SED并尝试一些表达。

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:0)

如果ID没有包含sed特有的任何字符,那么带地址+替换的普通sed应该有效:

sed -i~ "/$SEARCH_PATTERN/s/{.*}/{$NEW_IDENTIFIER}/" file

答案 1 :(得分:0)

很简单。它对我有用: -

 sed "/g_ExistingMachineID/s/{.*}/{$NEW_IDENTIFIER}/" yourfile.txt

刚试过以下: -

NEW_IDENTIFIER="456EFABC-4567-546C-B4E2-DA2F45AE2CD3"
echo 'g_ExistingMachineID[] = _T( "{123ABCDE-1234-312C-B4E2-0E5F15BD1CA9}" )' | sed "/g_ExistingMachineID/s/{.*}/{$NEW_IDENTIFIER}/"

输出: -

g_ExistingMachineID[] = _T( "{456EFABC-4567-546C-B4E2-DA2F45AE2CD3}" )