2

/etc/lvm/lvm.confファイルから読み取り、複数行にまたがる可能性のある以下のパターンを確認し たいと思います。

tags {
 hosttags = 1
} 

tags{の間には多くの空白を入れることができ{ますhosttags。同じ行ではなく、次の行に続くことも{できます。tags

私はこれを使用awksedて行うことを計画しています。

ファイルの読み取り中はlvm.conf、空の行とコメントをスキップする必要があります。

私が使用していること。

data=$(awk < cat `cat /etc/lvm/lvm.conf`            
/^#/        { next }                       
/^[[:space:]]*#/            { next }                
/^[[:space:]]*$/            { next }                
.          
.                            

sed上記で説明したパターンを見つけるためにどのように使用できますか?

4

3 に答える 3

1

このようなものをお探しですか

sed -n '/{/,/}/p' input

つまり、トークン間の行を出力しますか (包括的)?

#空行または空白のみを含む行を削除するには、次を使用します。

sed -n '/{/,/}/p' input | sed '/#/d' | sed '/^[  ]*$/d'

                              space and a tab--^

アップデート

空行が単なる空行 (ws なし) である場合、上記は次のように短縮できます。

sed -e '/#/d' -e '/^$/d' input

update2

パターンtags {...がファイルに存在するかどうかを確認するには、次を使用します

$ tr -d '\n' < input | grep -o 'tags\s*{[^}]*}'
tags { hosttags = 1# this is a comment}

上記のtr部分は、すべての改行を削除します。つまり、すべてを 1 行にまとめ (ファイルがそれほど大きくない場合はうまく機能します)、tagsパターンを検索して、すべての一致を出力します。

grep からの戻りコード0は、パターンが見つかった1場合です。戻りコードは variable に格納されます$?。または、上記を にパイプして、wc -l見つかった一致の数を取得します。

update3

tags { hosttags=1 }どこでも任意の数の wsを検索するための正規表現

'tags\s*{\s*hosttags\s*=\s*1*[^}]*}'
于 2013-03-12T15:11:24.970 に答える
0

最初にファイルを前処理して、コメントと空行を削除し、閉じ中括弧の後ろに空行を挿入して、2 番目の awk で簡単に処理できるようにすることができます。

awk 'NF && $1!~/^#/{print; if(/}/) print x}' file | awk '/pattern/' RS=
于 2013-03-12T16:00:34.567 に答える
0

この行を試してください:

 awk '/^\s*#|^\s*$/{next}1' /etc/lvm/lvm.conf
于 2013-03-12T15:16:23.947 に答える