Как удалить все между двумя символами с помощью sed?

Mi causa raíz era inusual, pero la mencionaré de todos modos en caso de que alguien cometa el mismo error. Estaba usando cifsen /etc/auto.directen Ubuntu 16.04.4 (actualizado recientemente a partir de 16.04 ). No agregué vers=1.0.

Compatibilidad con versiones anteriores -uno de los mayores mitos del software.

1
07.09.2017, 22:04
3 ответа

Учитывая, что вы хотите удалить ~~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в конце гарантирует, что все такие совпадения в каждой строке будут удалены.

6
27.01.2020, 23:16

adt* означает a, за которым следует d, за которым следует любое количество t, включая 0.

Точка соответствует любому символу, поэтому используйте

~~adt.*~

Для соответствия ~~adt, за которым следует любое число (, включая 0 )символов, за которым следует ~.

1
27.01.2020, 23:16

Вы можете попробовать это:

sed 's/~.*~//' file > file_new

Вывод будет:

478|14395189_p0.jpg
479|44836628_p0.jpg
480|Miku_Collab_2_by_Luciaraio.jpg
1
27.01.2020, 23:16

Теги

Похожие вопросы