1

特定の日付範囲に従ってファイルからテキストを抽出しようとしています。日付範囲はユーザーが決定しますが、ここでは固定範囲を使用しています。

使用後のファイル内容grepは以下の通りです。

ronnie@ronnie:~$ zgrep added new.txt
Jul 02 21:03 : update: added Linkin Park/Living Things(2012)/02 - Linkin Park - In My Remains.mp3
Jul 02 21:03 : update: added Linkin Park/Living Things(2012)/03 - Linkin Park - Burn It Down.mp3
Jul 07 10:33 : update: added Linkin Park/Living Things(2012)/04 - Linkin Park - Lies Greed Misery.mp3    
Jul 09 07:54 : update: added Linkin Park/Living Things(2012)/04 - Linkin Park - Lies Greed Misery.mp3

Jul 07ここで、dateとの間のテキストを抽出したいとしますJul 09。だから私はそのために以下のコマンドを使用しました

zgrep added new.txt | sed '/"Jul 09"/,/"Jul 07"/p'

次の出力が得られました

Jul 02 21:03 : update: added Linkin Park/Living Things(2012)/02 - Linkin Park - In My Remains.mp3
Jul 02 21:03 : update: added Linkin Park/Living Things(2012)/03 - Linkin Park - Burn It Down.mp3
Jul 07 10:33 : update: added Linkin Park/Living Things(2012)/04 - Linkin Park - Lies Greed Misery.mp3
Jul 09 07:54 : update: added Linkin Park/Living Things(2012)/04 - Linkin Park - Lies Greed Misery.mp3

したがって、ご覧のrangeとおり、sed に与えたものは考慮されていません。

私の質問は、日付範囲に従ってテキストを抽出する正しい方法はどうあるべきかということです。

4

2 に答える 2

3

注文入力の場合、

command | sed -n '/^Jul 07/,/^Jul 09/p' inputFile

十分なものです。

于 2012-07-09T15:00:39.890 に答える
1

あなたはかなり近いです、あなたが望むものはこれです:

zgrep added new.txt | sed -n -e '/Jul 09/,/Jul 07/p'

変更点は次のとおりです。

  • 追加されました-n。これは、特に指定しない限り、行が印刷されないことを意味します。p
  • -eわかりやすくするために追加しました
  • 文字列の前後の二重引用符を削除しました。式はすでに一重引用符で囲まれており、二重引用符はファイルに表示されないため、これらは必要ありません。

これとお使いのバージョンは、行が常に最初に日付/時刻で並べ替えられている場合にのみ機能することに注意してください。

于 2012-07-09T15:01:51.750 に答える