Каково использование шаблона перед командой замены в sed?

Каково использование шаблона перед командой замены в sed?

В этом есть примерсвязьо 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

Второго не будет.

Плюс, второй вариант также удалит начальный #.

Связанный контент