如何使用sed删除两个字符之间的所有内容?

Wey*_*van 2 sed text-processing

我有一个包含总共 482 行的文件,我想从中删除 ~~adt*~~。这是内容的样子:

478|~~adt00000aa9~~~~adt0000000b~~14395189_p0.jpg
479|~~adt00000995~~44836628_p0.jpg
480|~~adt00000aae~~Miku_Collab_2_by_Luciaraio.jpg
Run Code Online (Sandbox Code Playgroud)

我试过了,sed 's/~~adt*~//' file > new_file但它没有删除所有内容。

如何删除第一个和最后两个 ~~ 符号之间的所有内容?

Kus*_*nda 6

鉴于您要删除~~adt(something)~~并且可能有~~(something different)~~其他行(问题中未显示):

$ sed 's/~~adt[^~]*~~//g' file.in >file.out
Run Code Online (Sandbox Code Playgroud)

对于给定的数据,这将生成

478|14395189_p0.jpg
479|44836628_p0.jpg
480|Miku_Collab_2_by_Luciaraio.jpg
Run Code Online (Sandbox Code Playgroud)

adt最后一行的更改为xxx,命令生成

478|14395189_p0.jpg
479|44836628_p0.jpg
480|~~xxx00000aae~~Miku_Collab_2_by_Luciaraio.jpg
Run Code Online (Sandbox Code Playgroud)

该模式~~adt[^~]*~~将匹配所有出现的 ,~~adt后跟任意数量的不是 的字符,~然后~~再次匹配。将/g在年底将确保在每一行所有这些比赛都被删除。