プロが教えるわが家の防犯対策術!

ファイルの中身が以下の場合で、checkの前後の文字をファイル出力したいです。
perlで記述するにはどの様したら良いか教えてください。

File
aaa ccc check 111 ddd eee
abc def efg hi check 0 111 222 333
444 check xxxxx yy zzzz a

期待するファイル出力は、
check before: ccc , after: 111
check before: hi , after: 0
check before: 444 , after: xxxxx

です。
宜しくお願いします。

A 回答 (2件)

checkが一行に複数ないという前提なら...



#!/usr/bin/perl

while(<>){
s/\s+/ /g;
if(/(.*)\s+check\s+(.*)/){
$a = $1;
$b = $2;
$a =~ s/^.*\s+//;
$b =~ s/\s+.*$//;
print "before: $a after: $b\n";
}
}



$> ./foo < file
before: ccc after: 111
before: hi after: 0
before: 444 after: xxxxx
    • good
    • 1

「前後の文字」で「文字」を厳密に解釈すると, どの場合も「前後の文字」は「空白文字」になっちゃうんだけど....



あと
・複数回現れる, あるいは 1回も現れない行
・「前」や「後ろ」がない場合
にはどうすればいい?

な~んにも考えないなら s/// でいいようにも見えるけど, たいてい確認すると面倒くさい条件を
後から
増やしてくるんだよな (もちろん「前から」は増やせないけど).
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!