(sed 명령) -> sed $foo [닫기]

(sed 명령) -> sed $foo [닫기]

저는 sed 명령을 사용하여 파일의 특정 식별자를 바꾸는 스크립트를 작성 중입니다. 스크립트에는 현재 sed 명령이 하드코딩되어 있습니다.

현재 방법:

s*ed 's/@Number@/ '  "${Number}" '/g; s/@Value@/ ' "${Value}" '/g; 
        s/@Socket@/ ' "${Socket}" '/g' File_Template > index.html*

sed 명령은 더 이상 하드코딩되지 않으며 다양한 sed 요구 사항을 가진 많은 프로세스를 실행하고 있으므로 다음과 같은 작업을 수행하고 싶습니다.

표적:

INITIALIZE_SED_COMMAND='s/@Number@/ ' "${Number}" '/g;
        s/@Value@/ ' "${Value}" '/g; 
        s/@Socket@/ ' "${Socket}" '/g;'
# Some logic happens here
INITIALIZE_SED_COMMAND="$INITIALIZE_SED_COMMAND File_Template > index.html"  ;

sed $INITIALIZE_SED_COMMAND

이것은 Linux 플랫폼에서 스크립트로 작동 .sh하지만 .ksh unix

실수:

sed: s/@Number@/npdsfg/g; 파일을 찾거나 열 수 없습니다.

sed: s/@Value@/SQR 파일을 찾거나 열 수 없습니다.

sed: #s/@Socket/semi_/g; 파일을 찾거나 열 수 없습니다.

답변1

이는 Linux 기반 시스템에서 Linux 기반이 아닌 시스템(AIX, 아마도?)으로 마이그레이션한 결과가 아닙니다. 이는 쉘이 명령을 구문 분석하고 실행하는 방법에 대한 근본적인 오해입니다.

이 코드를 작성하고 파일에 타임스탬프를 기록할 것으로 기대할 수는 없습니다.

v="date > /tmp/date.txt"
$v

마찬가지로 이 코드를 작성하여 교체를 수행하고 결과를 출력 파일에 쓰도록 할 수는 없습니다.

v="s/abc/XYZ/ /tmp/source > /tmp/destination"
sed $v

변수 내에서 파일 리디렉션을 지정할 수 없습니다.

당신이 찾고 있는 것은 sed -f대체 파일을 생성하여 소스 데이터 파일에 적용할 수 있는 곳이라고 생각합니다.

#!/bin/ksh
# Usage: thisprogram  <transform_file>  <src_file>  <dst_file>
#
transform="$1"
src="$1"
dst="$2"

sed -f "$transform" "$src" >"$dst"

변환 파일에는 다음 작업이 포함될 수 있습니다.

s/@Number@/1234/g
s/@Value@/somevalue/g
s/@Socket@/99b44/g

분명히 특정 실행의 맥락에서 이를 준비해야 합니다.

문제에 대한 자세한 내용을 포함하여 이 솔루션을 추가로 적용하는 것이 가능할 수도 있지만 여기에는 특정 사용 사례에 맞게 다시 설계할 수 있는 충분한 정보가 있다고 생각합니다.

관련 정보