搜索并替换括号内的序列

搜索并替换括号内的序列

我有一个文件,其中有一行

byte address[] = { 0x54, 0x36, 0x45 };

我试图通过用户提供的 3 个命令行参数来更改文件 -

grep byte | sed 's/\{.*\}/{ 0x$1, 0x$2, 0x$3 }/g' file.c

但没有成功。

使用的命令是 -

sh script.sh 44 33 22

输出/输出-

byte address[] = { 0x44, 0x33, 0x22 };

任何使用帮助sed/awk都会很棒!

答案1

您需要意识到 的\{特殊之处sed。所以你需要这个:

#!/bin/sh
# filename: yourscript.sh
# usage: ./yourscript.sh 44 33 22
for arg; do set "$@" " 0x$arg"; shift; done
IFS=",";
sed -e "/byte address\[\]/s/{[^}]*}/{$* }/"  yourfile.c

结果

When invoked as:
%   ./yourscript.sh 44 33 22
byte address[] = { 0x44, 0x33, 0x22 };

解释

  1. hexified第一个任务是从参数中获取数字。我们通过使用循环遍历参数列表来获得这一点for。每次,我们将当前参数的十六进制版本附加到参数列表的末尾$@,同时shift从列表的前面删除当前参数。所以这意味着在循环迭代结束时for我们将得到hexified参数列表。
  2. 现在我们将 设为IFS逗号,以便用逗号连接参数。
  3. sed 代码将"$*"列表引入替换部分内sed s///

相关内容