我有一个文件,其中有一行
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 };
hexified
从参数中获取数字。这是通过使用循环遍历参数列表而获得的for
。每次,我们将当前参数的十六进制版本添加到参数列表的末尾,$@
同时shift
从列表的前面删除当前参数。因此,这意味着在for
循环迭代结束时,我们将得到hexified
参数列表。IFS
为逗号以将参数与逗号连接。"$*"
列表带入sed
s///
替换零件内。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句