Заменить совпадение регулярного выражения строкой, содержащей совпадение

net.inet.ip.fastforwarding FreeBSD sysctl опция, которая включит путь оптимизации в сетевом стеке.

Это было представлено ядру FreeBSD в 2003. Быстрый тракт передачи опускает некоторые проверки на пакеты, переданные к исходящему интерфейсу. Неодноадресные пакеты, пакеты с опциями IP или пакеты, предназначенные к локальным IP-адресам, отступают к нормальному пути обработки.

2
17.07.2015, 10:38
4 ответа
sed 's/=\(+[0-9]\{1,3\}\)/(\1)=\1/' 

Для решения вашей проблемы (как я понял):

Шаблоны, которые необходимо запомнить в sed , должны быть заключены в круглые скобки - их внешний вид определяет их порядковый номер. Например:

sed 's/\(<memorized_pattern_1>\)<not_memorized>\(<memorized_pattern_2>\)/\2\1/'

поменяет местами шаблоны 1 и 2 и удалит средний.

8
27.01.2020, 21:49

Используйте это:

sed 's/=\(+[0-9]\+\)/(\1)=\1/' file

Он ищет = + , за которым следует хотя бы одна цифра ( [0-9] \ + ) и заменяет все на желаемый формат ( (\ 1) = \ 1 ).

3
27.01.2020, 21:49
sed 's/=\([^= ]*\) *$/(\1)&/' <in >out

Приведенное выше просто заменит последний знак равенства в строке и все символы, следующие за первым, на ...

  1. Копию следующих, которые являются не пробелом, окруженными двумя скобками (в случае, если в строке есть завершающие пробелы)

  2. Весь совпадающий шаблон заново.

В правой части (поле замены в s /// ubstitution) \ 1 представляет первый \ ( групповой захват \) и & представляет весь согласованный шаблон как группу. Итак ...

sed 's/=\([^= ]*\) *$/(\1)&/' <<\IN
    Afghanistan=+93
    Albania=+355
    Algeria=+213
    American Samoa=+1
    Andorra=+376
    Angola=+244
IN

    Afghanistan(+93)=+93
    Albania(+355)=+355
    Algeria(+213)=+213
    American Samoa(+1)=+1
    Andorra(+376)=+376
    Angola(+244)=+244
3
27.01.2020, 21:49

Предположим, что все данные находятся в файле с именем file, тогда

     awk -F "=" '{print $1"("$2")="$2}' file
2
27.01.2020, 21:49

Теги

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