- - PR -
文字操作(grep,sed?)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-20 14:14
テキストファイルの文頭に<body>、文末に</body>を付け加え、
また、ある文字"UPDOWN"を検索したら、その行の先頭に<font color="red">を付け、その行の行末に</font>を付け加えたいのですが、どう記述すれば良いでしょうか? 例えば、テキストファイル(access.log)が、 Dec 14 13:52:・・・%LINK-5-CHANGED: Inte・・・ate to administratively down Dec 14 13:52:1・・・ JST: %LINEPROTO-5-UPDOWN: Li・・・nged state to down Dec 14 13:52:20 10.・・・ ・・・・ の時に <body> Dec 14 13:52:・・・%LINK-5-CHANGED: Inte・・・ate to administratively down <font color="red">Dec 14 13:52:1・・・ JST: %LINEPROTO-5-UPDOWN: Li・・・nged state to down</font> Dec 14 13:52:20 10.・・・ ・・・・ </body> としたいのですが、如何でしょうか? | ||||
|
投稿日時: 2004-12-20 14:58
はじめまして。 文字列操作ならperlでプログラミングするのが適していると思います。 | ||||
|
投稿日時: 2004-12-20 15:25
ニックさん、返答ありがとうございます。
なるほど、perlですか! 拙者、perlとは、これまでご縁が御座いません。 この機会に、含蓄を蓄えたいのも山々ですが、 何とかsedやgrep辺りのコマンドで転がせたらと考えております。 sed でしたら、行の先頭なら^、行末なら$を表すので その辺りで何とかならないでしょうか? perlは、時期を見て勉強したいです。 | ||||
|
投稿日時: 2004-12-20 15:31
chmod 755 tagadd.sh
使い方: $ ./tagadd.sh access.log $ vi neo [ メッセージ編集済み 編集者: コブラ 編集日時 2004-12-20 15:37 ] | ||||
|
投稿日時: 2004-12-20 15:41
sedにこだわるなら、
sed "1 i\<body\>" filename | sed "$ a\<\/body\>" でも、この手の処理系ならwakあたりが最適かも。。。 っと、既にコブラさんがコメントしているようですね。 | ||||
|
投稿日時: 2004-12-20 15:47
いかん、wakでなくawkですね。
awkであれば、awkだけで特定の文字が出た際に内容を変える事も容易にできます。 ヘッダーやフッターについては簡単に実現できますね。 | ||||
|
投稿日時: 2004-12-20 15:51
De-Militarized Areaさん、ここって $[0..9] って消えてしもてうっとおしないですか?
直すの面倒臭いっすよね。 | ||||
|
投稿日時: 2004-12-20 16:07
sedじゃつらいんじゃないかな?
自分もawkだけで書いて見ました。 ![]() ----file a.aw----- BEGIN{print "<body>"} { if(index($0,"UPDOWN")!=0) print "<font color=\"red\">" $0 "</font>" else print $0 } END{ print "</body>"} 使い方 $ awk -f a.aw input-file _________________ おしえて〜。せんせ〜いさ〜ん。 [ メッセージ編集済み 編集者: ほろりん 編集日時 2004-12-20 16:17 ] CODEタグを使うとうまくはりつかない。。。orz [ メッセージ編集済み 編集者: ほろりん 編集日時 2004-12-20 16:19 ] perl版(うまい人はもっとうまく書けるでしょうけど) #!/usr/bin/perl print "<body>\n"; while (<>) { if (index($_,/UPDOWN/) != 0) { chomp; # strip record separator print "<font color=\"red\">" . $_ . "</font>\n"; } else { print $_; } } print "</body>"; [ メッセージ編集済み 編集者: ほろりん 編集日時 2004-12-20 17:20 ] awk別解 BEGIN{print "<body>"} /UPDOWN/ { print "<font color=\"red\">" $0 "</font>"} !/UPDOWN/{ print $0} END{ print "</body>"} [ メッセージ編集済み 編集者: ほろりん 編集日時 2004-12-20 18:16 ] [ メッセージ編集済み 編集者: ほろりん 編集日時 2004-12-20 18:20 ] |