含まれている行を削除したいです。窒素キャラクターのインスタンスです。この場合、文字は/
。
私はプログラムを使用することを好みますsed
。
ベストアンサー1
使用する必要がある場合、sed
コマンドは次のとおりです。
sed -E -- '\-^([^/]*/[^/]*){3}$-d'
しかし、使用する必要がない場合は、sed
最も簡単な解決策はを使用することですgrep
。
このコマンドのNを希望の値に置き換えます。窒素:
egrep -vx '([^/]*/[^/]*){N}'
grep
これを行うすべての行を表示-v
するコマンドラインオプションがあります。grep
いいえ正規表現を一致させます。したがって、次のタスクは、N個のスラッシュ文字を含む行に一致する正規表現を正確に作成し、その正規grep -v
表現を使用することです。
例は次のパターンです。
[^/]*/[^/]*
N インスタンスはパターンです。
([^/]*/[^/]*){N}
正確にN個のインスタンスのパターンは次のとおりです。
^([^/]*/[^/]*){N}$
行全体にのみ一致するパターンのコマンドラインオプションgrep
もあります(例:この例)。-x
だからNを3としましょう。正規表現は、3つのインスタンスを持つ行のみが確実に一致しますか/
?
$ cat << EOF | egrep -x '([^/]*/[^/]*){3}'
/
//
///
////
/stuff
/stuff/added
/stuff/added/
/stuff/added/to/
/stuff/added/to/each
/stuff/added/to/each/line
more/stuff
more/stuff/added
more/stuff/added/
more/stuff/added/to/
more/stuff/added/to/each
more/stuff/added/to/each/line
consecutive//slashes/
/consecutive//slashes/
/consecutive//slashes
///all in one place
all in one place///
all in ///one place
EOF
///
/stuff/added/
more/stuff/added/
consecutive//slashes/
/consecutive//slashes
///all in one place
all in one place///
all in ///one place
はい、正規表現が正しい行に一致しました。これで-v
フラグを追加するだけです。ろ過行を一致させ、一致しない行を表示します。
$ cat << EOF | egrep -vx '([^/]*/[^/]*){3}'
/
//
///
////
/stuff
/stuff/added
/stuff/added/
/stuff/added/to/
/stuff/added/to/each
/stuff/added/to/each/line
more/stuff
more/stuff/added
more/stuff/added/
more/stuff/added/to/
more/stuff/added/to/each
more/stuff/added/to/each/line
consecutive//slashes/
/consecutive//slashes/
/consecutive//slashes
///all in one place
all in one place///
all in ///one place
EOF
/
//
////
/stuff
/stuff/added
/stuff/added/to/
/stuff/added/to/each
/stuff/added/to/each/line
more/stuff
more/stuff/added
more/stuff/added/to/
more/stuff/added/to/each
more/stuff/added/to/each/line
/consecutive//slashes/