次のリンクがたくさんあります。
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と一致する正規表現です.svg
。jpg
または.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
ファイルをインポートし、で終わるダミーラインを追加すると、*.txt
Rakuを使用した回答は次のようになります。
~$ 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
引数も必要です(単純に次のように省略されます。:i
jpg
JPG
~$ 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。