한 줄이 있는 파일이 있습니다.
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 };
설명하다
hexified
첫 번째 작업은 매개변수에서 숫자를 가져오는 것입니다. 매개변수 목록을 반복하는 루프를 사용하여 이를 얻습니다for
. 매번 현재 매개변수의 16진수 버전을 매개변수 목록 끝에 추가하고$@
목록shift
앞부분에서 현재 매개변수를 제거합니다. 즉, 루프 반복이 끝나면 매개변수 목록을for
얻게 됩니다 .hexified
IFS
이제 매개변수를 쉼표로 연결할 수 있도록 쉼표 로 설정하겠습니다 .- sed 코드는
"$*"
교체 섹션에 목록을 소개합니다sed
s///
.