쉘 스크립트 5줄 단위로 특정 문자열 검색조건문 문의입니다.

rp2kmc의 이미지

현재 cat info.txt | egrep -A5 "Begin" >info2.txt 라는 명령으로 1차 가공을 하였으며
info2.txt의 내용이 아래와 같이 5줄씩 출력된 가운데 1st, 4th interface에는 Description이 존재하고 2nd, 3rd에는 없습니다(Description 문구조차 없음)

============== info2.txt 내 용=================
Begin 1st-interface
Error: none
Description: Backbone
IP: 1.1.1.11
Gateway: 1.1.1.1
--
Begin 2nd-interface
Error: none
IP: 1.1.1.12
Gateway: 1.1.1.1
age: 300
--
Begin 3rd-interface
Error: none
IP: 1.1.1.13
Gateway: 1.1.1.1
age: 200
--
Begin 4th-interface
Error: none
Description: Uplink
IP: 1.1.1.14
Gateway: 1.1.1.1
=========================================

여기서 제가 얻고자 하는 결과는 아래와 같습니다.
============== 원하는 결과내용=================
Backbone
공백라인(비어있는 라인을 추가)
공백라인(비어있는 라인을 추가)
Uplink
=========================================

perl / cut / patse / for는 사용이 불가능한 상황으로
egrep / sed / while / echo등을 이용하여 구현이 가능하다면 부탁드리겠습니다.

ymir의 이미지

$ cat info2.txt
Begin 1st-interface
Error: none
Description: Backbone
IP: 1.1.1.11
Gateway: 1.1.1.1
--
Begin 2nd-interface
Error: none
IP: 1.1.1.12
Gateway: 1.1.1.1
age: 300
--
Begin 3rd-interface
Error: none
IP: 1.1.1.13
Gateway: 1.1.1.1
age: 200
--
Begin 4th-interface
Error: none
Description: Uplink
IP: 1.1.1.14
Gateway: 1.1.1.1
 
$ cat info2.txt | sed -z 's/\n\([^-]\)/ \1/g' | \
> while read -r line; do grep -q Description: <<< $line && sed 's/.*Description: \([^ ]\+\).*/\1/g' <<< $line || echo; done
Backbone
 
 
Uplink

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

rp2kmc의 이미지

뭔가 괭장히 심플하면서도 어렵네요
우선 돌려볼거긴한데 저기서 5줄의 기준이 되는 구문이 [^-]인가여?

pynoos의 이미지

awk 를 쓰면 더 쉬울텐데, 선택지엔 없군요. ;-)

awk '/^--/ { print desc; desc = ""; } /^Description/ { gsub("Description: ",""); desc=$0 } END { print desc; }' info2.txt
rp2kmc의 이미지

이 구문도 해보겠습니다 정말 감사드려요^^

익명 사용자의 이미지

루비가 없어서 무효입니다 ㅋㅋ

rp2kmc의 이미지

쉘 명령어의 일종인가여? 우선 가능하시면 좀 알려주세요 ㅋㅋ
방법이라도 정리를 좀 해두면 나중에 분명히 쓰일거같아서요 ㅜ

익명 사용자의 이미지

루비라는 인터프리터 언어가 있습니다. 파이썬 같은 언어에요.
https://www.ruby-lang.org/ko/about/

sample1.rb

#!/usr/bin/ruby
 
if ARGV.length != 1
  puts "Usage: ruby sample1.rb FILENAME"
  exit
end
 
filename = ARGV[0] # 터미널에서 ruby sample1.rb FILENAME 실행했을 때 0번째 인자(FILENAME).
 
file = File.new(filename) # 파일을 엽니다. 그외 자세한건 api 문서 참고.
file.each_with_index do |line, index| # index 변수에는 라인 번호가 넘어옵니다. 0번부터 시작
  case index % 6 # 샘플 파일이 6줄로 반복되므로 6 으로 나누고 나머지가..
  when 2 # 2일 경우
    if line.start_with? "Description" # Description 으로 시작하는가?
      puts line.split[1] # line 을 짤랐을 때 두번째 거 출력
    else
      puts # "\n" 을 출력합니다(공백 라인).
    end
  end
end

아래처럼 실행합니다.

hodong@:/home/hodong $ ruby sample1.rb info2.txt
Backbone
 
 
Uplink

루비 언어 철학은 행복한 프로그래밍이에요 *^^*
현실에서는 루비보다는 파이썬이 100배 많이 쓰입니다.
그냥 이런 언어가 있다는 것만 알아두세요.
기왕 배울거면 루비보다 파이썬 배우는게 좋답니다.
근데 파이썬 공부하다가 문법이 뭐 같아서 짜증하면 그때 루비 배우시면 되요^^

rp2kmc의 이미지

사실 개발자가 아니라 언어나 스크립트같은걸 지금껏 손도 안대고 있다가 이번에 우연히 자동화 공부를 하게되면서 쉘이랑 파이썬 아주 약간 검색해가면서 해보고있는데 이거 왜케 잼있죠?ㅜㅜ 루비도 우선 정리를 해놔야겠어요 몇가지 스크립트만 정리해놔도 분명히 쓸거같아요
정말 감사드립니당^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.