回答:
を使用sed
してファイルを適切に変更します。
sed -i '/^\(report\|-t\(h\|o\)\)/!d' your_file
これsed
は、パターンに一致しないすべての行を削除するように指示します。パターン自体では、^
(ラインの開始)のいずれかに続いてreport
、または-t
その後のいずれかによってh
、またはo
。
これは実際のインプレース変更ではないことに注意してください。sed
一時的なバックアップコピーを作成し、元のファイルを上書きします。
sed
元のファイルのバックアップコピーを保持する場合(ファイルに重要なデータが含まれている場合は、これが適切な場合があります)、-i
バックアップファイルを作成するための拡張子をスイッチに指定します。
sed -i'.bak' -e '/^\(report\|-t\(h\|o\)\)/!d' your_file
とyour_file
呼ばれる元のバックアップを変更および作成しますyour_file.bak
。
サイドノート
私の意図を誤解したり、これに腹を立てたりしないでください。しかし、類似の正規表現/テキスト処理関連の質問がたくさんあることに気付きました。私はあなたが学習を開始することをお勧めsed
、awk
とgrep
自分で自分の生産性アップの助け速度に。繰り返しますが、誤解しないでください。私は(この辺りにいるほとんどの人がそうであるように)とても喜んでお手伝いします。日常的に使用するためにこれらのツールを入手することで、大きな利益を得ることができると私が思うだけです。
周りの人々がどれほど役に立ったかを証明するために、下のコメントで@slmの提案を検討し、いつでもこのチャットルームに気軽に立ち寄って質問してください。
これには単純なgrepを使用できます。
$ grep -e '^report\|^-th\|^-to' filename
-th
/と-to
を組み合わせることができます-t[ho]
。
grep -e
またはegrep
使用sed
:
sed -n -e '/^report\|^-th\|^-to/p' filename
-th
/と-to
を組み合わせることができます-t[ho]
。
質問者は2つの点を指摘しました。
現時点での解決策は、最初のポイントに対処し、それによって2番目のポイントにも対処します。しかし、ファイルが大きく、次のようになっているとします。
report aaaaaaaa
- ..
-th bbbbbbbbb
-to ccccccccc
anything else
.. --.
-tp ddd
-tq eee
- -----
OPの2番目のポイントに対処する必要はありませんか?
sed -r -i.bak '/^[ |.|-]*$/d' input-file
スペース、ドット、ダッシュだけが含まれていると思われる不要な行を削除し、残りを保持します。
どちらのアプローチのリスクも、ファイルの性質が適切に定義されていないことだと思います。