sed - 一致しないすべての行を削除する方法

sed - 一致しないすべての行を削除する方法

HTMLファイルがあります。これを行うすべての行を削除したいと思います。いいえで始めてください<tr>

私は試した:

cat my_file | sed $'
s/^[^tr].*//
' | sed '/^$/d'

ただし、すべての行を削除します。

答え1

GNU sedを使ってこれを試してください:

sed -n '/^<tr>/p' file

または

sed '/^<tr>/!d' file

答え2

sed -e '/^<tr>/d'

その間の部分は/正規表現です。このdコマンドは一致する行を削除します。

アップデート:こんな、ダメだと言われたのを見て申し訳ありません。だから

sed -e '/^<tr>/!d'

これは!ゲームの意味を否定します。

答え3

次の場合sed

sed -ni '/^<tr>/p' file

-i-nすべての行が印刷されないように、ファイルを内部で編集してくださいsed。正規表現は、^()で始まるすべての行と一致<tr>し、その行(p)が印刷されることを意味します。

そしてgrep

grep -E '^<tr>' file

-E拡張正規表現を解釈するには、grepを使用してください。

そしてawk

awk '/^<tr>/' file

または純粋bash:

while IFS= read -r l; do [[ "$l" =~ ^\<tr\> ]] && echo $l; done <file

[[bash 内部条件式です。$l正規表現と比較し、成功すると()&&行を印刷しますecho

答え4

最も簡単で簡単な答えは次のとおりです。

grep '^<tr>' path/to/file 

これは、ファイルを直接変更したくない場合(sedのように)、次の行で始まるファイルだけを印刷することをお勧めします。

その後、出力結果が好きならファイルに印刷できます。> file

この場合、特定のコマンドを試す前にファイルをバックアップすることで時間を節約できます。

関連情報