-1

私はこの質問を読んでいましたデータを選択するために条件式を使用する方法は?

与えられたsedソリューションは

sed -r '1d;/(\S+\s+){5}\S+/!d;/\+$/s/\S+\s+//5;/-$/s/\S+\s+//4' file

ビットが理解できなかった

1d;- このstatmenetは何をしますか

/(\S+\s+){5}\S+/- 空白以外の任意の文字に 5 回以上一致します

!dこれが何をするかわからない

/\+$/これは + で終わるものすべてを意味します

s/\S+\s+//5;知らない

/-$/ - で終わるものをすべて検索します。

s/\S+\s+//4'知らない

4

1 に答える 1

0

1d;

これは単純に 1 行目を削除します。

/(\S+\s+){5}\S+/!d;

これは、任意の (非空白文字 [ \S] 1 回以上 [+] に任意の空白文字 [ \s] が 1 回以上[ ] 続く+) [ ] の 5 回{5}と、その後に非空白文字 [ \S] が 1 回以上続くものと一致します。 [ +] 一致する [ ] を含まない行の行全体を削除し!dます。

構文/pattern/dはパターンを検索し、そのパターンを含む行を削除します。それを に変更すると/pattern/!d、その一致を含まないすべての行が削除されるという点で、逆になります。

/\+$/s/\S+\s+//5;

\+$これは、リテラルのプラス記号で終わる任意の行に一致する pattern を検索します。次にs/\S+\s+//5、それらの行でアクションを実行します。\S+\s+このコマンドが行うことは、パターン(最後のステートメントの説明に基づいて解釈できるはずです) を検索し、各行で 5 番目に一致したものを削除することです (行全体ではなく、一致するビット)。

ここでの基本的な構文はs/pattern/replacement/. 置換が空白のままになっているため、一致を削除する効果があります。構文を変更するとs/pattern/replacement/n、n 番目のオカレンスのみが置き換えられます。

/-$/s/\S+\s+//4;

これは上記とほぼ同じですが、マイナス記号で終わる行を検索し、それらの行で 4 番目に出現するパターンを削除する点が異なります。

HTH。

于 2013-01-18T14:55:50.533 に答える