대괄호 안의 시퀀스 검색 및 바꾸기

대괄호 안의 시퀀스 검색 및 바꾸기

한 줄이 있는 파일이 있습니다.

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///.

관련 정보