특정 string 밑에 한줄 추가하는 것을 shell script로 구현가능
글쓴이: 김경태 / 작성시간: 월, 2005/01/10 - 10:38오전
aaa
bbb
ccc
이런 형식의 파일을
aaa
kkk
ccc
이렇게 바꿀려면
for file in $( find . -name '*.ec' -print) do echo $file sed -e s/bbb/kkk/g $file > $file.tmp mv $file.tmp $file done
이렇게 하면 되겠죠.
하지만
aaa
bbb
ccc
를
aaa
bbb
kkk
ccc
와 같이 특정 string 밑에 한줄을 추가하려면 어떻게 해야 할까요?
물론 C,C++로 프로그램 짜면 되겠지만 가능하다면 간편하게 shell script로 이런 작업을 대처하고 싶은데....혹시 이런게 shell script로 가능할까요?
가능하다면 어떤 방법이 있을지 한수 가르쳐 주시면 매우 고맙겠습니다.
그럼 새해 복 많이 받으세요. ^^;
Forums:
Re: 특정 string 밑에 한줄 추가하는 것을 shell script로 구현
여러 방법이 있겠지만, 지금 알고계신 것만으로도,
bbb 를
bbb\<줄바꿈>
kkk
로 치환하면 됩니다.
Re: 특정 string 밑에 한줄 추가하는 것을 shell script로 구현&
로긴했었던 것 같은데... -_-;;;
Orion Project : http://orionids.org
아래와 같이 하면 어떨까요?[code:1]sed -e "
아래와 같이 하면 어떨까요?
sed -e "/bbb/a\kkk" FILE.a > FILE.b
---
배려하는 마음을 갖자.
[quote="eseo"]아래와 같이 하면 어떨까요?[code:1
잘 않되는데...제가 착각하는 부분이 뭔지 알려주십시요.
대체로 의견들이
첫째로는 sed -s /bbb/bbb\(엔터)kkk/g로 바꾸면 된다.
둘째로는 sed "/bbb/a\kkk" 로 바꾸면 된다.
첫번째 두번째 방법이 다 않되는 군요.
1. 첫번째 방법으로 하게 되면....
aaa
bbb
ccc
가
aaa
bbbkkk
ccc
로 됩니다.
2. 두번째 방법으로 하면
sed: Function /bbb/a\kkk cannot be parsed.
라는 메시지와 함께 파일의 모든 내용이 없어집니다.
제가 원하는 것은
aaa
bbb
kkk
ccc
인데...잘 않되는 군요.
제가 뭘 착각한 것인지...그렇다면 착각한 내용이 뭔지 알려주셨으면 합니다.
혹여 이런 방법 말고 다른 방법이 있다면 알려주셔도 되구요.
^^;
Re: 잘 않되는데...제가 착각하는 부분이 뭔지 알려주십시요.
이렇게 해보세요...
Re: 잘 않되는데...제가 착각하는 부분이 뭔지 알려주십시요.
-_-;;;
자동 로그 아웃 되나봐요...?
Orion Project : http://orionids.org
....
엔터는 \n입니다.
__________________________________________________
모두 다 Hardy로 업그레이드 하고 있습니다.
그래도 않되는 군요.
1.sed -e 's/aaa/aaa\nkkk/g' test.txt
2.sed -e '/aaa/a\kkk' test.txt
3.sed -s '/bbb/bbb\(엔터)kkk/g'
1의 결과:
aaa aaa
bbb -> bbbnkkk
ccc ccc
2의 결과:
./kkk.ec
sed: Function /bbb/a\kkk cannot be parsed.
와 같은 메시지와 함께 원파일 소실
3의 결과:
sed: illegal option -- s
Usage: sed [-n] Script [File ...]
sed [-n] [-e Script] ... [-f Script_file] ... [File ...]
mv: cannot rename ./kkk.ec.tmp to ./kkk.ec:
No such file or directory
와 같은 메시지와 함께 실행불가
--------------------------------------------------------------------
생각대로 잘 되지 않는군요....왜 그럴까요?
고수님의 지도편달 부탁드립니다.
Re: 그래도 않되는 군요.
원문 수정했습니다. 김경태님께서 애초에 -s 옵션을 쓰셔서
그것을 그대로 복사해서 쓰다가 그렇게 됐네요. -e 옵션으로 바꾸세요.
Orion Project : http://orionids.org
체스맨님 방법대로 했을 때의 실험 결과입니다.
sed -e s/bbb/bbb\(엔터)kkk/g $file > $file.tmp
로 하게 되면
즉
와 같이 실행하면,
aaa aaa
bbb -> bbbkkk
ccc ccc
와 같이 됩니다.
왜 않 되는지 궁금하네요. (*_*)
고수님들의 지도편달 부탁드립니다.[/code]
Re: 체스맨님 방법대로 했을 때의 실험 결과입니다.
-e 옵션 주시고...
말씀 드렸듯이, 위처럼 '' 로 둘러싸 주세요...
Orion Project : http://orionids.org
그냥 펄로하는것도 편한데.. redirect가 없어서 더 안전겠네요..
그냥 펄로하는것도 편한데.. redirect가 없어서 더 안전겠네요.. ^^
perl -pi -e 's/bbb/bbb\nkkk/g' filename
What do you want to eat?
좋은 지식 알려주신 여러분들 감사드립니다. ^^;
perl로도 sed로도 둘다 가능하군요.
아주 유용한 tip을 알려주셔서 앞으로 두고 두고 잘 써먹을 것 같습니다.
특히 체스맨님, 화이트키드님 두분다 새해 복 많이 받으세요. ^^;
추가로
sed에서도 -i 옵션을 이용해 redirection 없이 파일 자체를 수정할 수 있습니다.
댓글 달기