字幕(.srt)ファイルから行を抽出しようとしています。特定の行番号を検索すると、期待した回答が得られます。
% grep -e "^817" ponyo.srt
817
%
ただし、キャリッジリターン(またはキャリッジリターンとEOL)を含む行を見つけようとすると、空の行が表示されます。
% grep -e "^817\r" ponyo.srt
% grep -e "^817^M$" ponyo.srt
%
以下は、「cat -e」を使用して隠し文字を表示するテキストファイルです。
% cat -e ponyo.srt
1^M$
00:04:38,478 --> 00:04:43,381^M$
The Beginning^M$
^M$
2^M$
00:04:44,751 --> 00:04:51,122^M$
PONYO ON THE CLIFF BY THE SEA^M$
^M$
474^M$
01:00:23,016 --> 01:00:25,041^M$
Stay here with Ponyo.^M$
^M$
475^M$
01:00:25,285 --> 01:00:28,618^M$
I'm going too.^M$
Let's take Ponyo with us.^M$
^M$
817^M$
01:40:08,532 --> 01:40:13,834^M$
<i>Oh he 's my favorite little boy</i>^M$
^M$
823^M$
01:40:32,456 --> 01:40:38,156^M$
Studio Ghibli^M$
^M$
824^M$
01:40:39,530 --> 01:40:42,624^M$
The End^M$
^M$
825^M$
01:40:42,766 --> 01:40:45,792^M$
English translation by^M$
Jim Hubbert and Rieko Izutsu-Vajirasarn^M$
English subtitles by^M$
Aura^M$
^M$
%
行の終わりを探して結果から行全体を取得するにはどうすればよいですか?
編集する:追加するには、期待どおりにEOLを検索しても結果は返されません。
% grep -e "^817$" ponyo.srt
%
答え1
(答えをくれた@steeldriverに感謝します。)
で述べたようにこの投稿 grep --color
grep が端末に応答を書き込む方法を変更して、^M
画面の書き込みを妨げます。私はalias grep='grep --color=auto'
これをbash設定で使用しています。この問題を解決し、永続的なソリューションを作成するためにエイリアスをバイパスするために、エイリアスなしで\
シェルでgrepを使用しました。
% \grep -e "^817^M" ponyo.srt
817
%
答え2
2つが中断を引き起こしているようです。まず、二重引用符を使用しています。これは、シェルが特定の内容をそのまま渡すのではなく解釈するという意味です。第二に、私のシェルは一重引用符を使用しても正しく検索できないため、ドル記号を\でエスケープする必要があるかもしれません。これらのパラメータを変更すると、grep
実際に探している行が返されます(または少なくとも私にはそうしました)。