sed
sh
명령줄에서는 작동하지만 파일에 넣고 실행하면 작동하지 않습니다. 기존 파일의 번호를 변경하여 새 파일로 전달하고 싶어서 다음을 시도했습니다.
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