web-dev-qa-db-ja.com

特定の文字列で始まる行を削除する方法

特定の文字列で始まる行を削除する方法はありますか。

私はこのyoutube-dlコードを持っています

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E

結果はこんな感じ

[youtube:playlist] PL1C815DB73EC2678E: Downloading webpage
[download] Downloading playlist: Less than 1 minute
[youtube:playlist] playlist Less than 1 minute: Collected 4 video ids (downloading 4 of them)
[download] Downloading video 1 of 4
[youtube] KNLwsqzFfNg: Downloading webpage
[youtube] KNLwsqzFfNg: Extracting video information
[youtube] KNLwsqzFfNg: Downloading DASH manifest
[download] Destination: _1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.m4a

[download]   0.4% of 231.51KiB at  6.10KiB/s ETA 00:30
[download]   1.1% of 231.51KiB at 27.07KiB/s ETA 00:10
[download]   4.0% of 231.51KiB at 19.24KiB/s ETA 00:04
[download]   6.5% of 231.51KiB at 75.06KiB/s ETA 00:03
[download]  13.4% of 231.51KiB at 98.22KiB/s ETA 00:03
[download]  28.7% of 231.51KiB at 81.40KiB/s ETA 00:02
[download]  61.7% of 231.51KiB at 91.56KiB/s ETA 00:01
[download]  86.2% of 231.51KiB at 82.96KiB/s ETA 00:00
[download] 100.0% of 231.51KiB at 73.21KiB/s ETA 00:00
[download] 100% of 231.51KiB in 00:02
[ffmpeg] Correcting container in "_1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.m4a"
WARNING: Your copy of avconv is outdated, update avconv to version 10-0 or newer if you encounter any errors.
[avconv] Destination: _1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.mp3
WARNING: Your copy of avconv is outdated, update avconv to version 10-0 or newer if you encounter any errors.
Deleting original file _1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.m4a (pass -k to keep)
[download] Downloading video 2 of 4
[youtube] wTvXkMpJflk: Downloading webpage
[youtube] wTvXkMpJflk: Extracting video information
[youtube] wTvXkMpJflk: Downloading DASH manifest

[youtube][ffmpeg]、および[avconv]で始まるすべての行を削除して、次のようにします。

[youtube:playlist] PL1C815DB73EC2678E: Downloading webpage
[download] Downloading playlist: Less than 1 minute
[youtube:playlist] playlist Less than 1 minute: Collected 4 video ids (downloading 4 of them)
[download] Downloading video 1 of 4
[download] Destination: _1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.m4a

[download]   0.4% of 231.51KiB at  6.10KiB/s ETA 00:30
[download]   1.1% of 231.51KiB at 27.07KiB/s ETA 00:10
[download]   4.0% of 231.51KiB at 19.24KiB/s ETA 00:04
[download]   6.5% of 231.51KiB at 75.06KiB/s ETA 00:03
[download]  13.4% of 231.51KiB at 98.22KiB/s ETA 00:03
[download]  28.7% of 231.51KiB at 81.40KiB/s ETA 00:02
[download]  61.7% of 231.51KiB at 91.56KiB/s ETA 00:01
[download]  86.2% of 231.51KiB at 82.96KiB/s ETA 00:00
[download] 100.0% of 231.51KiB at 73.21KiB/s ETA 00:00
[download] 100% of 231.51KiB in 00:02
WARNING: Your copy of avconv is outdated, update avconv to version 10-0 or newer if you encounter any errors.
WARNING: Your copy of avconv is outdated, update avconv to version 10-0 or newer if you encounter any errors.
Deleting original file _1 min. - Amendes pour les particules du LHC-KNLwsqzFfNg.m4a (pass -k to keep)
[download] Downloading video 2 of 4
etc..
etc..
.
.

私はこの方法を試しましたが、エラーが表示され、[youtube]を削除することのみを想定しています

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | sed '^/[youtube]/ d' 
5
potholiday
sed -i '/\[youtube\]/d' /path/to/file

「[youtube]」を含む行を削除します。

1つのコマンドとして、次のようなパターンを組み合わせることができます

sed -i '/\[youtube\]\|\[ffmpeg\]\|\[avconv\]/d' /path/to/file

またはあなたのコマンドから

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 \
 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | 
    sed '/\[youtube\]\|\[ffmpeg\]\|\[avconv\]/d' > output.txt

これにより、結果がファイルoutput.txtに書き込まれます。

[youtube]だけでなく[youtube]で始まる行を削除する場合は、^のように、パターンにsed '/^\[youtube\]/d'を追加します。

しかし、あなたの場合、それは重要ではありません。

9
Pilot6

grep -vEを次のように使用することをお勧めします。

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | grep -vE '^\[(youtube|ffmpeg|avconv)\]'

man grepから:

-v, --invert-match
              Invert the sense of matching, to select non-matching lines.  (-v
              is specified by POSIX.)



-E, --extended-regexp
              Interpret  PATTERN  as  an extended regular expression (ERE, see
              below).  (-E is specified by POSIX.)

-Eフラグは、大括弧をスラッシュでエスケープしないようにするために使用されます。 -Eフラグを使用しない場合、grep -vE '\[youtube\]\|\[ffmpeg\]\|\[avconv\]'Edit:のように、角かっこをバックスラッシュでエスケープする必要があります

awkをリクエストしたので、ここにawkがあります:

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | awk '{if ($0~/^\[youtube\]/||/^\[ffmpeg\]/||/^\[avconv\]/||/^WARNING/) next;print}'

4

次のようにgrep -vを使用します。

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | grep -v '^[youtube]' | grep -v '^[ffmpeg]' | grep -v '^[avconv]'
1
Abdennour TOUMI

Perlの使用:

< inputfile Perl -pe 's/^\[(youtube|ffmpeg|avconv)\].*$//' > outputfile

youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678Eの出力を直接解析するには、inputfileのコンテンツをリダイレクトせずに出力をコマンドにパイプします。

`youtube-dl --extract-audio --audio-quality 0 --newline --audio-format mp3 https://www.youtube.com/playlist?list=PL1C815DB73EC2678E | Perl -pe 's/^\[(youtube|ffmpeg|avconv)\].*$//' > outputfile` 
  • < inputfileinputfileのコンテンツをPerlstdinにリダイレクトします
  • > outputfilePerlstdoutのコンテンツをoutputfileにリダイレクトします
  • -p:スクリプトの周りにwhile (<>) { [...] }ループを配置し、処理された各行を出力します
  • -e:引数からスクリプトを読み取ります

Perlスクリプトの内訳:

  • s:置換を実行するようにアサートします
  • /:パターンを開始します
  • ^:行の先頭に一致
  • \[[文字に一致
  • (:許可された文字列のグループ化を開始します
  • youtubeyoutube文字列に一致
  • |:2番目に許可された文字列を区切ります
  • ffmpegffmpeg文字列に一致
  • |:3番目に許可された文字列を区切ります
  • avconvavconv文字列に一致
  • ):許可された文字列のグループ化を停止します
  • \]]文字に一致
  • .*:任意の数の任意の文字と一致します
  • $:行末に一致
  • /:パターンを停止/置換文字列を開始
  • /:置換文字列を停止します
1
kos