1つのコマンドで多数の単語を削除する

1つのコマンドで多数の単語を削除する

次のリンクがたくさんあります。

https://content.example.net/skin/frontend/2015/default/fonts/test.ttf
https://content.example.net/skin/frontend/2015/default/img/test.svg
https://content.example.net/skin/frontend/2015/default/fonts/test.eot
https://content.example.net/skin/forntend/2015/default/js/test.js

URLにCSS、jpg、svg、png、ttfなどのテキストを含むファイルからリンクを削除する方法

今、次のようなものを使用してください

cat url.txt | sed '/png/d'  | sed '/jpg/d' | sed '/svg/d' | ...etc 

この作業には時間と労力がかかります。

これは一晩で行うことができますか?

答え1

正規表現に「OR」構文を使用できます。

sed -E '/png|jpg|svg/d' url.txt

両方のパターンのいずれかを含むすべての行が削除されます。パターンがファイル拡張子であることを確認したい場合は、パターンが表示されることを確認してください行末で、正規表現にアンカーを含めることができます。

sed -E '/(png|jpg|svg)$/d' url.txt

catところで、ファイルをに入れる必要はありませんsed。自分ですべてを読んでください。

答え2

Grepも使用できます。

grep -vE '\.(svg|jpg|png)' file

-v一致しない行のみを印刷し、拡張正規-E表現を有効にします。

\.(svg|jpg|png)orと一致する正規表現です.svgjpgまたは.png

このファイルを修正したい場合は、

  • グローバルコマンドでEdを使用します。

    printf '%s\n' 'g/\.\(svg\|jpg\|png\)/d' w q | ed -s file
    

    gグローバルコマンドで、d一致する行を削除し、w変更を保存してq終了します。

  • BashとVimを使ったGNU/Linuxシステムでは

    vim -e file<<<'g/\v\.(svg|jpg|png)/d|x'
    

    gまた、グローバルコマンドで\vエスケープ角かっこの必要性を無効にし、x変更を保存します。

答え3

grepよりよく合う。

たとえば、スキーマファイルを生成します。

printf '\\.%s$\n' svg jpg png > patterns.txt

以下を使用して行を削除します。

grep -vf patterns.txt url.txt

または直接:

grep -ve "$(printf '\\.%s$\n' svg jpg png)" url.txt

出力:

https://content.example.net/skin/frontend/2015/default/fonts/test.ttf
https://content.example.net/skin/frontend/2015/default/fonts/test.eot
https://content.example.net/skin/forntend/2015/default/js/test.js

答え4

Rakuを使う(古いPerl 6)

OPの元のurl.txtファイルをインポートし、で終わるダミーラインを追加すると、*.txtRakuを使用した回答は次のようになります。

~$ cat url.txt | raku -ne '.say unless .ends-with( "ttf" | "svg" | "eot" | "js" );' 

出力:

https://content.example.net/skin/forntend/2015/default/js/test.txt

上記のコードは、行の終わりを見たい特定の場合に機能します(Rakuのends-withルーチンを使用します)。if行末があるかどうかを選択するには。を使用してunless行末があるかどうかを選択します(unlessと同じif not)。

andというファイルがある場合、このends-withルーチンには:ignorecase引数も必要です(単純に次のように省略されます。:ijpgJPG

~$ cat url.txt | raku -ne '.say unless .ends-with( "ttf" | "svg" | "eot" | "js", :ignorecase );'

出力:

https://content.example.net/skin/forntend/2015/default/js/test.txt

HTH。

https://raku.org/

関連情報