sedを使用して2つの文字間のすべての内容を削除するには?

sedを使用して2つの文字間のすべての内容を削除するには?

合計482行のファイルがあります。削除~~広告*~~から。内容は次のとおりです。

478|~~adt00000aa9~~~~adt0000000b~~14395189_p0.jpg
479|~~adt00000995~~44836628_p0.jpg
480|~~adt00000aae~~Miku_Collab_2_by_Luciaraio.jpg

試してみましたが、sed 's/~~adt*~//' file > new_fileすべては削除されませんでした。

最初と最後の2つの~~記号の間にあるすべての項目をどのように削除できますか?

ベストアンサー1

削除したい~~adt(something)~~他の行にある可能性があることを考慮すると~~(something different)~~(質問には表示されません):

$ sed 's/~~adt[^~]*~~//g' file.in >file.out

与えられたデータに対して以下が生成される。

478|14395189_p0.jpg
479|44836628_p0.jpg
480|Miku_Collab_2_by_Luciaraio.jpg

adt最後の行をに変更すると、xxxこのコマンドが生成されます。

478|14395189_p0.jpg
479|44836628_p0.jpg
480|~~xxx00000aae~~Miku_Collab_2_by_Luciaraio.jpg

このパターンは、すべての文字の後に以外の文字が複数回出現した~~adt[^~]*~~場合と一致し、再び一致します。最後に、各行のすべての一致が削除されるようにします。~~adt~~~/g

おすすめ記事