sed は、特定の文字を含む正確な行数を削除します。

sed は、特定の文字を含む正確な行数を削除します。

含まれている行を削除したいです。窒素キャラクターのインスタンスです。この場合、文字は/

私はプログラムを使用することを好みます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/

おすすめ記事