Linuxコマンドを使用して単語を検索するスクリプト

Linuxコマンドを使用して単語を検索するスクリプト

ファイルがあり、ファイルデータに複数行に1単語しかありません。この状況が発生した場合は、次の行を現在の行に印刷したいと思います。

アドバイスを得ることができますか?

grep -E "module" filename   # to fetch the line which contains the "module"

モジュールの後に文字列がない場合、2 行目はモジュール行の拡張として扱われます。

はい

module module_name1(i1,i2,i3)
statement1;
statement2;
statement3;
   .
   .
statement;

module 
module_name2(i1,i2,i3)   #observe here
statement1;
statement2;
statement3;
   .
   .
statement;

module module_name3(i1,i2,i3)
statement1;
statement2;
statement3;
   .
   .
statement;

module module_name4(i1,i2,i3)
statement1;
statement2;
statement;
   .
   .
statement;

期待される出力

module_name1(i1,i2,i3)
module_name2(i1,i2,i3)
module_name3(i1,i2,i3)
module_name4(i1,i2,i3)

私が得た結果は何ですか?

module_name1(i1,i2,i3)
                         #missing
module_name3(i1,i2,i3)
module_name4(i1,i2,i3)

次の行を現在の行と見なしたい場所がありません。

ベストアンサー1

$ perl -ne 'if (s/^module\s*//) { $_ = <> if ($_ eq ""); s/\).*/)/; print }' file
module_name1(i1,i2,i3)
module_name2(i1,i2,i3)
module_name3(i1,i2,i3)
module_name4(i1,i2,i3)

このperl one-linerは各入力行(-nオプション)を読み取り、行の先頭から「module」という単語と末尾のスペースを削除しようとします。

成功したら、現在の行が空であることを確認してください。もしそうなら、次の行($_ = <>)を読んでください。どちらも最初の)文字()s/\).*/)/の後のすべての内容を削除し、修正された行を印刷します。

ジョブが失敗した場合はs/^Module\s*//何も印刷されず、スクリプトは次の入力行に進みます。

おすすめ記事