내 파일 데이터 패턴은 다음과 같습니다. 변수 값 eth0 및 eth1을 기준으로 6 또는 3 또는 8 또는 4를 출력해야 합니다.
eth0RX:6:eth0TX:3|eth1RX:8:eth1TX:4|
아래 코드는 정상적으로 실행됩니다.
sed 's/.*eth0RX:\([0-9]\+\).*/\1/g' $EMSTATE/packetdrop.txt
하지만 아래와 같이 동적 변수를 사용하면 실패합니다.
rxfile=sed 's/.*$iRX:\([0-9]\+\).*/\1/g' $EMSTATE/packetdrop.txt
답변1
- 작은따옴표 안의 모든 내용은 다음과 같습니다.
$i
은 달러 기호 뒤에i
. 변수를 사용하려면 다음과 같이 문자열을 큰따옴표로 묶어야 합니다."s/.*$iRX:\([0-9]\+\).*/\1/g"
- 하지만 이는 이라는 변수를 찾기 때문에 작동하지 않습니다
iRX
. 이 문제를 해결하는 가장 쉬운 방법은 다음과 같이 변수 이름을 중괄호 안에 넣는 것입니다."s/.*${i}RX:\([0-9]\+\).*/\1/g"
$EMSTATE
큰따옴표도 넣어야 합니다 ."$EMSTATE"/packetdrop.txt
또는"$EMSTATE/packetdrop.txt"
중 원하는 것을 사용할 수 있습니다 .
답변2
작은따옴표 내에서는 변수 확장이 발생하지 않습니다. 대신 큰따옴표를 사용하세요. 결과를 변수로 설정하려면 sed
명령 대체 구문으로 실행 해야 하며 $(...)
가급적이면 인용도 해야 합니다 "$(...)"
. 또한 $iRX
유효한 변수 이름이 될 수 있는데, 이 방법이 가장 좋습니다 ${i}
.
rxfile="$(sed "s/.*${i}RX:\([0-9]\+\).*/\1/g" "$EMSTATE/packetdrop.txt" )"