Удалить только последнюю цифру после определенного знака, если знак (_) присутствует в строке несколько раз

У меня есть ответ, /var/mail должен быть ссылкой, а не каталогом.

lrwxrwxrwx 1 root root 10 Jan  5 20:17 /var/mail -> spool/mail
0
28.01.2020, 14:15
2 ответа
sed 's/_[^_]*$//' < file

Замените _, за которым следует 0 или более(*)символов, отличных от _([^_]), за которыми следует конец строки $, на ничего .

5
28.04.2021, 23:25

Вот еще один способ:

sed -nr 's/(.*)_.*/\1/p' file

Жадно сопоставить (самую длинную строку, которая соответствует )всем символам до _(, которая будет называться \1 ), за которой следует остальная часть строки, и заменить ее группой \1.

Без -аргумента r назад -ссылки (типа \1 )не будут работать.

Опция -n отключает обычную печать каждой вещи в пространстве шаблонов после выполнения всех команд sed.

cat file
AY498934.1_cds_AAS79865.1_1_1
AY498934.1_cds_AAS79865.1_1_2
AY498934.1_cds_AAS79865.1_1_3


sed -nr 's/(.*)_.*/\1/p' file
AY498934.1_cds_AAS79865.1_1
AY498934.1_cds_AAS79865.1_1
AY498934.1_cds_AAS79865.1_1
2
28.04.2021, 23:25

Теги

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