我有一个文件,总共包含 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
,但它并没有删除所有内容。
如何删除第一个和最后两个 ~~ 符号之间的所有内容?
答案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
的 将会确保每行上的所有此类匹配都被删除。
答案2
adt*
表示a
后面跟着d
任意数量的 ,t
包括 0。
点匹配任何字符,所以使用
~~adt.*~
匹配~~adt
后跟任意数量(包括 0)个字符,后跟~
.
答案3
你可以试试这个:
sed 's/~.*~//' file > file_new
输出将:
478|14395189_p0.jpg
479|44836628_p0.jpg
480|Miku_Collab_2_by_Luciaraio.jpg