sed는 sh 파일에서는 작동하지 않지만 명령줄에서는 작동합니다.

sed는 sh 파일에서는 작동하지 않지만 명령줄에서는 작동합니다.

sedsh명령줄에서는 작동하지만 파일에 넣고 실행하면 작동하지 않습니다. 기존 파일의 번호를 변경하여 새 파일로 전달하고 싶어서 다음을 시도했습니다.

echo enter number 
read num
var1='more ods2.sql | egrep -e "test" | cut -c 5-7' 
sed "s/test$var1/test$num/g" ods2.sql > odstest.sql

프롬프트에서 이러한 명령문을 실행하면 원하는 결과가 수행됩니다. $var1전달한 문자열로 바꿉니다. 예를 들면 다음과 같습니다 12345.

sed "s/test$var1/test$num/g" ods2.sql > odstest.sql

프롬프트에서 이것은 또한 잘 작동합니다:

more ods2.sql | egrep -e "test" | cut -c 5-7'

쉘 스크립트에 넣으면 왜 작동하지 않습니까?

답변1

이 줄

var1='more ods2.sql | egrep -e "test" | cut -c 5-7'

~해야 한다

var1=`more ods2.sql | egrep -e "test" | cut -c 5-7`

즉, 작은따옴표(아포스트로피) 대신 백틱을 사용해야 합니다.

답변2

more터미널에서 작동하도록 설계되었습니다. 더 간단한 방법은

var1=$(< ods2.sql grep "test" | cut -c 5-7)
sed "s/test$var1/test$num/g" ods2.sql > odstest.sql

Picky: 하지만 첫 번째 줄은 조심하세요. ods2.sql에서 추출하려는 텍스트의 위치와 길이에 대해 가정하고 있습니다. var1어떻게 생겼는지 모르겠지만 숫자라고 가정하는 예는 다음과 같습니다.

var1=$(< ods2.sql sed -n 's/test\([:digit:]*\)/\1/p')
if ! [ -n "$var1" ]  # sed didn't find the pattern
    # complain, exit
fi

관련 정보