だから私は現在「高度な」正規表現と呼ぶことについて非常に慣れていません。ご了承ください。皆さんにとってこれは本当に簡単かもしれませんが、今すぐ私は正しい方向を提示しなければならないからです。苦軍奮闘する。
フォーラムとウェブサイト(次を含む)をクロールしました。http://www.grymoire.com/Unix/Sed.html)そして私は私が探していたものを見つけることができなかったか、少なくともその逆を見つけることができませんでした。だから私はそれを反転して、私が望む標準出力を得ました。
データ(標準入力)は次のとおりです。
C:\Users\Maison\Documents\AutoCad_dir
True
False
0
1
User
Group
Everyone
Full Access
S-I-D
C:\Users\Maison\Documents
True
False
0
1
User
Group
Everyone
Full Access
S-I-D
やりたいことは正規表現を使って各行を削除することです4 目次 以上そして次の10行(CR \ rを含む)。
残りは次のとおりです。
C:\Users\Maison\Documents
True
False
0
1
User
Group
Everyone
Full Access
S-I-D
ノート:ボリュームラベル(C:)が一定ではなく、使用中のデータが絶対的ではありません。
もちろん、私が持っている実際のデータには、私が削除したい行に似た行がたくさんあります。
これまでに私が持っていた最高は次のとおりです。
sed '/pattern/I,+11 d' infile
しかし、論理的なパターンを考え出すことはできません。これまでに思いついたすべてのパターンは、ディレクトリ数に関係なくすべての行を削除します。
私は尋ねたくありませんが、これは最終的にRegExとGNU sedについてよりよく理解することができます。
ベストアンサー1
例:
sed '/^[A-Z]:\\\([^\\]\+\\\)\{3,\}/,+10d' test.txt
拡張正規表現(-r
で指定sed
)を使用する場合は、次をエスケープするだけで、式を読みやすくなります\
。
sed -r '/^[A-Z]:\\([^\\]+\\){3,}/,+10d' test.txt
興味深い部分は、([^\\]+\\){3,}
括弧内のパターンがを除くすべての文字の1つ以上のインスタンスと一致することを意味し/
、その後には/
。マッチ。