角かっこ内のシーケンスの検索と置換

角かっこ内のシーケンスの検索と置換

1行のファイルがあります。

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。毎回、現在のパラメータの16進バージョンをパラメータリストの末尾に追加し、$@リストshiftの前半から現在のパラメータを削除します。つまり、ループの反復が終了するとパラメータのリストがfor得られます。hexified
  2. IFS次に、パラメータをコンマで連結できるようにコンマに設定します。
  3. sedコードは"$*"交換セクションにリストを紹介しますsed s///

関連情報