특정 string 밑에 한줄 추가하는 것을 shell script로 구현가능

김경태의 이미지

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로 가능할까요?

가능하다면 어떤 방법이 있을지 한수 가르쳐 주시면 매우 고맙겠습니다.

그럼 새해 복 많이 받으세요. ^^;

익명 사용자의 이미지

여러 방법이 있겠지만, 지금 알고계신 것만으로도,

bbb 를

bbb\<줄바꿈>
kkk

로 치환하면 됩니다.

체스맨의 이미지

Anonymous wrote:
여러 방법이 있겠지만, 지금 알고계신 것만으로도,

bbb 를

bbb\<줄바꿈>
kkk

로 치환하면 됩니다.

로긴했었던 것 같은데... -_-;;;

Orion Project : http://orionids.org

eseo의 이미지

아래와 같이 하면 어떨까요?

sed -e "/bbb/a\kkk" FILE.a > FILE.b

---
배려하는 마음을 갖자.

익명 사용자의 이미지

eseo wrote:
아래와 같이 하면 어떨까요?

sed -e "/bbb/a\kkk" FILE.a > FILE.b

저두 이거라구 생각은 했었는데 전 왜 어렴풋하게만 생각나는 걸까요 ㅠ.ㅠ
김경태의 이미지

대체로 의견들이

첫째로는 sed -s /bbb/bbb\(엔터)kkk/g로 바꾸면 된다.
둘째로는 sed "/bbb/a\kkk" 로 바꾸면 된다.

첫번째 두번째 방법이 다 않되는 군요.

1. 첫번째 방법으로 하게 되면....

for file in $( find . -name '*.ec' -print)
do
  echo $file
  sed -e s/bbb/bbb\
kkk\
/g $file > $file.tmp
  mv $file.tmp $file
done

aaa
bbb
ccc

aaa
bbbkkk
ccc

로 됩니다.

2. 두번째 방법으로 하면

sed: Function /bbb/a\kkk cannot be parsed.
라는 메시지와 함께 파일의 모든 내용이 없어집니다.

제가 원하는 것은

aaa
bbb
kkk
ccc

인데...잘 않되는 군요.

제가 뭘 착각한 것인지...그렇다면 착각한 내용이 뭔지 알려주셨으면 합니다.

혹여 이런 방법 말고 다른 방법이 있다면 알려주셔도 되구요.

^^;

익명 사용자의 이미지

김경태 wrote:

sed -s /bbb/bbb\(엔터)kkk/g로 바꾸면 된다.

sed -s '/bbb/bbb\(엔터)kkk/g'

이렇게 해보세요...

체스맨의 이미지

Anonymous wrote:
김경태 wrote:

sed -e /bbb/bbb\(엔터)kkk/g로 바꾸면 된다.

sed -e '/bbb/bbb\(엔터)kkk/g'

이렇게 해보세요...

-_-;;;
자동 로그 아웃 되나봐요...?

Orion Project : http://orionids.org

환골탈태의 이미지

엔터는 \n입니다.

sed -e 's/aaa/aaa\nkkk/g' test.txt

또는

sed -e '/aaa/a\kkk' test.txt

__________________________________________________
모두 다 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

와 같은 메시지와 함께 실행불가

--------------------------------------------------------------------

생각대로 잘 되지 않는군요....왜 그럴까요?

고수님의 지도편달 부탁드립니다.

체스맨의 이미지

김경태 wrote:

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

와 같은 메시지와 함께 실행불가

원문 수정했습니다. 김경태님께서 애초에 -s 옵션을 쓰셔서
그것을 그대로 복사해서 쓰다가 그렇게 됐네요. -e 옵션으로 바꾸세요.

Orion Project : http://orionids.org

김경태의 이미지

sed -e s/bbb/bbb\(엔터)kkk/g $file > $file.tmp
로 하게 되면

for file in $( find . -name '*.ec' -print)
do
  echo $file
  sed -e s/bbb/bbb\
kkk/g $file > $file.tmp
  mv $file.tmp $file
done

와 같이 실행하면,

aaa aaa
bbb -> bbbkkk
ccc ccc

와 같이 됩니다.

왜 않 되는지 궁금하네요. (*_*)

고수님들의 지도편달 부탁드립니다.[/code]

체스맨의 이미지

sed -e 's/bbb/bbb\(엔터)kkk/g' $file > $file.tmp

-e 옵션 주시고...
말씀 드렸듯이, 위처럼 '' 로 둘러싸 주세요...

Orion Project : http://orionids.org

whitekid의 이미지

그냥 펄로하는것도 편한데.. redirect가 없어서 더 안전겠네요.. ^^
perl -pi -e 's/bbb/bbb\nkkk/g' filename

What do you want to eat?

김경태의 이미지

perl로도 sed로도 둘다 가능하군요.

아주 유용한 tip을 알려주셔서 앞으로 두고 두고 잘 써먹을 것 같습니다.

특히 체스맨님, 화이트키드님 두분다 새해 복 많이 받으세요. ^^;

alfalf의 이미지

sed에서도 -i 옵션을 이용해 redirection 없이 파일 자체를 수정할 수 있습니다.

man sed wrote:
-i[suffix], --in-place[=suffix]

edit files in place (makes backup if extension supplied)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.