( 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

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

귀하의 질문에 더 자세한 내용을 추가하면 이 솔루션을 더 발전시킬 수 있지만 여기에는 귀하의 특정 사용 사례에 맞게 재작업할 수 있는 충분한 정보가 있다고 믿습니다.

관련 정보