搜索并替换括号内的序列

阿希什(Ashish K)

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

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

O / P-

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

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

用户名

您需要意识到的\{特殊之处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///替换零件内。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章