ファイルがあり、ファイルデータに複数行に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*//
何も印刷されず、スクリプトは次の入力行に進みます。