
В этом есть примерсвязьо sed
:
Чтобы удалить первую цифру во всех строках, начинающихся с «#», используйте:
sed '/^#/ s/[0-9][0-9]*//'
В чем преимущество первого шаблона( /^#/
)? Это может быть просто:
sed 's/^#[0-9][0-9]*//'
решение1
Общий формат sed
команд:
[address[,address]] function
Когда команда имеет один адрес, она действует на все строки, соответствующие этому адресу. Когда команда не имеет адреса, она действует на каждую отдельную строку.
Ссылка:POSIXsed
Относительно Ваших конкретных примеров:
/^#/ s/[0-9][0-9]*//
Эта команда имеет адрес,
/^#/
который соответствует всем строкам, начинающимся с#
.Шаблон замены —
/[0-9][0-9]*/
. Он соответствует первой последовательности цифр, где бы она ни встречалась в строке.Краткое изложение простым языком: удалить первую последовательность цифр в каждой строке, начинающейся с
#
.Пример:
# non-digits|5555|non-digits|5555
становится# non-digits||non-digits|5555
s/^#[0-9][0-9]*//
Адрес отсутствует, поэтому эта команда действует на каждую отдельную строку.
Шаблон замены
/^#[0-9][0-9]*/
, соответствует последовательности последовательных цифр, которым предшествует#
якорьв начале строки.Краткое изложение простым языком: удалить,
#
а затем последовательность цифр (и только этот шаблон) из начала каждой строки.Пример:
#5555|non-digits|5555
становится|non-digits|5555
, но# non-digits|5555|non-digits|5555
не изменяется, поскольку шаблон подстановки не совпадает.
решение2
Первый вариант будет соответствовать и заменять:
#abc99
Второго не будет.
Плюс, второй вариант также удалит начальный #
.