Заменить символы в совпадающей строке

В Linux было хорошо иметь собственные сценарии или программное обеспечение в / usr / local дерево, чтобы они были четко отделены от программного обеспечения распространения

И это именно то, что вы получаете от FreeBSD . Оболочки, такие как оболочка Z и оболочка Bourne Again , не являются частью FreeBSD . Это сторонние дополнения. Операционная система иногда называется сленговым названием «база». В общем, в мире BSD сторонние дополнения поверх "base" не живут в / usr . Они живут в / usr / local .

В мире BSD - и это верно для других операционных систем BSD, таких как OpenBSD - вы получаете операционную систему в / и / usr , а все остальное, что не операционная система находится в / usr / local . Если кто-то хочет только функциональность операционной системы без дополнений, он не принимает во внимание / usr / local в том, что он делает.

Небольшой поворот в том, что производные от FreeBSD, такие как TrueOS Server и TrueOS Desktop, скромно считают свои дополнения поверх FreeBSD не частью операционной системы.Таким образом, в / usr / local есть целая куча готовых к работе вещей TrueOS вместе с другими, не относящимися к операционной системе. Например: здесь вы найдете PCDM, диспетчер дисплеев TrueOS.

И наоборот, / usr / local - это все специально разработанное программное обеспечение, не являющееся частью операционной системы.

Чтобы показать, насколько сильно это разделение:

  • Скрипты Mewburn rc для вещей, не связанных с операционной системой, находятся в /usr/local/etc/rc.d/ и не добавляются в /etc/rc.d/ . Здесь вы найдете /usr/local/etc/rc.d/nginx .
  • Файлы конфигурации, не относящиеся к операционной системе, находятся в / usr / local / etc / , а не в / etc / . Здесь вы найдете / usr / local / etc / cups .
  • Существует различие между / usr / share / man , где находятся руководства по операционной системе, и / usr / local / man , где находятся руководства, не связанные с операционной системой.

Даже сам диспетчер пакетов (в настоящее время) не является частью собственно операционной системы. Есть менеджер пакетов «начальной загрузки», pkg-static . Это устанавливает pkg , фактический менеджер пакетов, который имеет файлы конфигурации в / usr / local / etc / pkg и сам по себе является надстройкой.

Концептуальный скачок, который вам нужно сделать, выйдя из мира «дистрибутивов» Linux, заключается в том, что вы не получите операционную систему, созданную путем выбора из мешанины пакетов, поставляемых «дистрибьютором».Вы получаете полную операционную систему как единое целое (устанавливается установщиком, обновляется с помощью freebsd-update и поддерживается как единая «загрузочная среда» с использованием ZFS), а все сторонние материалы как порты и пакеты отдельно от этого. Если вы сами поставляете сторонние материалы, будь вы разработчиком или системным администратором, вы также создаете порты и пакеты или просто помещаете их прямо в / usr / local как-то.

С другой стороны, специально разработанные программы, которые являются частями операционной системы, размещаются в / и / usr , где находится операционная система. Исходный код и система сборки для всей операционной системы поставляются в / usr / src как часть этой единственной самодостаточной системы. Вы вносите там локальные изменения, делитесь ими с другими людьми, используя Subversion (FreeBSD) и git (TrueOS), если хотите, и перестраиваете либо «пользовательскую среду» отдельно, либо всю операционную систему (как «оболочку», так и «ядро» ) отсюда.

Интересное примечание

Если вы, тем не менее, создаете свою собственную структуру для своих собственных машин, вы, согласно самому руководству по операционной системе, должны предоставить локальную hier страницу руководства, заменяющую операционную систему один. ☺

Дополнительная литература

2
20.03.2017, 00:16
2 ответа

Я не уверен, что regexp может запомнить длину шаблона, поэтому для чистого (частичного) решения sed :

edit:

это было немного сложнее.

Я придумал sed-файл a.sed

p
s/[0-9]\.[0-9]/a.a/g
s/with/phase 1/
p
s/[0-9]a\.a/aa.a/g
s/a\.a[0-9]/a.aa/g
s/phase 1/phase 2/
p
s/[0-9]aa.a/aaa.a/g
s/a.aa[0-9]/a.aaa/g
s/phase 2/final/

это в основном делает то же самое, что и командная строка, но с отладочной строкой.

  • первая строка ( - первая строка повернуть 1.2 в a.a (обратите внимание, что цифра в тексте, такая как 1.12% будет превращена в a.a2%)
  • следующие строки, рассчитанные на две и три цифры IP.) превратить 1.2 в a.a (обратите внимание, что цифра в тексте, например, 1,12% будет превращен в a.a2%)
  • следующие строки, создаваемые для двух- и трехзначного IP.
  • удалить линию с p и s/фаза x/.. / когда OK

use

sed -f a.sed u 

, где u (да, это недопустимый IP-адрес, но это тоже не так)

*random text with different numbers* 255.43.23.8 *some more text* "SpecialWord" 32.123.21.44 *text again*
*random text with different 12* 255.4.2.8 *some more text* "SpecialWord" 32.12.21.44 *text again*
*random text with different 13* 255.453.263.788 *some more text* "SpecialWord" 2.123.21.454 *text again*
*random text with different 1.12%* 255.43.23.8 *some more text* "SpecialWord" 32.123.21.44 *text again*
*random text with different numbers* 5.43.23.8 *some more text* "SpecialWord" 32.3.1.44 *text again*

это приведет к

*random text final different numbers* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*
*random text final different 12* aaa.a.a.a *some more text* "SpecialWord" aa.aa.aa.aa *text again*
*random text final different 13* aaa.aaa.aaa.aaa *some more text* "SpecialWord" a.aaa.aa.aaa *text again*
*random text final different a.aa%* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*
*random text final different numbers* a.aa.aa.a *some more text* "SpecialWord" aa.a.a.aa *text again*

edit2 : если вы можете позволить себе временный файл

grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}' u > v

получите список IP-адресов в v

sed s/[0-9]/a/g v > w

превратитесь в anonnymous IP в w

paste -d '/' v w | sed -e 's|^.*$|s/&/|'

сгенерируйте sed-файл, который превращает IP-адрес в анонимный IP...

paste -d '/' v w | sed -e 's|^.*$|s/&/|' | sed -f - u

... и применить к файлу.

результат такой же, как и выше, за исключением строки с 1.12%

*random text with different 1.12%* aaa.aa.aa.a *some more text* "SpecialWord" aa.aaa.aa.aa *text again*

это предполагает, что вы можете иметь временные файлы и любите использовать крылатую ракету, чтобы убить кролика.

0
27.01.2020, 22:41

Заменить IP без условий можно с помощью:

perl -pe 's!(\d+(\.\d+){3})! $1 =~s/\d/a/gr !ge' 

Пояснение: заменить IP на результат (заменить цифры на "a")

Чтобы защитить IP после "SpecialWord", пометьте IP знаком "#" (и уберите его в конце)

perl -pe 's/"SpecialWord"\s*\d+/$&#/; 
          ..... 
          s/#//'

Все вместе:

perl -pe 's/"SpecialWord"\s*\d+/$&#/; 
          s!(\d+(\.\d+){3})! $1 =~s/\d/a/gr !ge;
          s/#//'   file
0
27.01.2020, 22:41

Теги

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