[질문] 쉘스크립트작성중 특정줄 어떻게 뽑아내죠?

sdtool의 이미지

rh - 8 에서 bash 로 쉘 스크립트를 짜고 있습니다.

어떤 파일의 몇번째줄을 replace 하는 방법이 도저히 생각이 나질 않네요.

생각이 아니라..특정 줄 부분을 프린트하는 방법조차 모르겠네요.

nl , cat 도 아닌것 같고요. ㅡ,.ㅡ

예를들어..

test.txt 의 파일이 아래와 같이 3줄짜리 파일이라치면.

#cat test.txt
haha
22
44

3번째줄 44를 55로 바꾸고 싶은데 어떻게 해야 되나요??

저 그리고 sed 에 대해 좀더 궁금한게 있는데요.

str1 = if $HTTPD ; then
str2 = if $HTTPD -f $CONFFILE; then

위두문장이 있습니다.

str1이 원본이고요 str2가 바뀔문장인데.

sed "s@if $HTTPD ; then@if $HTTPD -f $CONFFILE; then@g" ./apachectl > ./apachectl.temp
rm -f apachectl
mv apachectl.temp apachectl

역시나 안되네요. 이렇게 복잡(?)한 문장은 어떻게 치환해야 되는지..

알려주세요. 문자열 처리 정말 복잡하군요. ㅡ,.ㅡ

다시한번 답변 부탁드리겠습니다.

McKabi의 이미지

sdtool wrote:

#cat test.txt
haha
22
44

3번째줄 44를 55로 바꾸고 싶은데 어떻게 해야 되나요??

cat test.txt | sed -e '3s@44@55@'

Quote:

str1 = if $HTTPD ; then
str2 = if $HTTPD -f $CONFFILE; then

위두문장이 있습니다.

str1이 원본이고요 str2가 바뀔문장인데.

sed "s@if $HTTPD ; then@if $HTTPD -f $CONFFILE; then@g" ./apachectl > ./apachectl.temp
rm -f apachectl
mv apachectl.temp apachectl

역시나 안되네요. 이렇게 복잡(?)한 문장은 어떻게 치환해야 되는지..

$ cat t
blah blah
if $HTTPD ; then
blah blah
$ cat t | sed -e 's@if $HTTPD ; then@if $HTTPD -f $CONFFILE; then@g'
blah blah
if $HTTPD -f $CONFFILE; then
blah blah

따옴표와 몇몇 특수문자에 신경만 써 주면 별 문제 없습니다.

ㄲ ㅏ ㅂ ㅣ / M c K a b i / 7 7 r b i / T o D y