Linux команди и умения за командни обвивки
sed: Редактиране на потоци без отваряне на редактор
sed редактира настрани: цели потоци от текст преминават през него, излизат трансформирани и не се отваря редактор. Неговата репутация идва от -i, който превръща заместване от един ред в групова операция в хиляди файлове, и от историите за бедствия на администратори, които го изпълняват без резервен суфикс. Безопасният работен процес никога не се променя: изпълнете замяната видима, потвърдете изхода, след това добавете -i със суфикс и запазете изходния код.
Ключови точки
- Преглед преди да се ангажирате: файлът sed -n '10,20p' показва диапазон от редове, а същата комбинация -n плюс p отпечатва само редове, които съответстват на регулярен израз или адрес.
- Заменете с флагове, които правят това, което имате предвид: s/old/new/g за всички съвпадения, число като 2g само за второто и -E за разширен регулярен израз без страница с обратна наклонена черта.
- Редакциите на място получават суфикс, без изключения: приложението sed -i.bak 's/http:/https:/g' запазва резервно копие със същото име до всяка промяна; този суфикс е спасил повече внедрявания, отколкото хронологията на отмените на всеки редактор.
- Разделителите са безплатни: s|/var/www|/srv/app|g (или s#...#g) избягва битките за избягване на наклонена черта, когато шаблонът ви е пълен с пътища.
- -i не е атомарно: срив или лош регулярен израз в средата на партида веднъж остави наполовина пренаписани файлове, така че груповите задачи се изпълняват срещу копия или git-проследени дървета, никога единственото копие.
- GNU и BSD sed не са съгласни относно -i: BSD изисква суфикса преди скрипта (sed -i '' работи на macOS, не е синтаксис на Linux), което е още една причина скриптовете за преносимост да избягват изцяло -i.
- Изтриване и изолиране са честни глаголи: 'd' премахва съответстващите редове (sed '/^#/d' премахва коментарите), а -n с диапазон изолира раздел; и двете се четат по-добре от умни замествания.
- Всичко след едноредови редакции, буквални многоредови блокове или съединявания със състояние принадлежи към awk или реален скрипт; принуждаването на sed да върши работа на програмист е начинът, по който се раждат нечетливи едноредови текстове.
Бележка от терен
Първият ми sed -i без суфикс .bak удари производствена конфигурация на nginx точно преди следобедния пик на трафика. Оттогава всяка редакция на място носи суфикс за резервно копие и аз прочетох изхода на сухо, преди -i дори да се доближи до командата.
Често задавани въпроси
Как да редактирам само редове, които съвпадат с нещо друго?
Обърнете внимание на тях: sed '/cache/s/true/false/' преобръща true към false само на редовете на кеша и диапазони като '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g' обхват редакции на блокове; адресът е първи, командата - втора.
Защо sed няма да съответства на краищата на редовете в редактиран от Windows файл?
Тези редове завършват със знаци за връщане на каретка, които '$' котвите не очакват; първо ги премахнете с tr или нормализирайте по пътя, а многоредовото съдържание все още принадлежи на awk или Perl с -0777.
Sed по-бърз ли е от awk за прости замествания?
Маргинално и без значение; и двете завършват за милисекунди на файлове с размер на конфигурация. Избирайте според четливостта, защото колегата трябва да разчисти едноредовия ви текст за шест месеца.
Мога ли да вмъкна цели конфигурационни блокове със sed?
Да: „a“ добавя след, „i“ вмъква преди и „c“ замества реда, но поддържайте вмъкнатия текст прост и едноцелеви; реалните блокове принадлежат към шаблонен файл или правилна стъпка за осигуряване.
Как Kinetikatech помага с linux команди и умения за командни обвивки
Честно казано, повечето екипи идват при нас, след като първо са опитали сами: Командите и скриптовите навици, които решават дали администраторът управлява сървър или се бори с него: търсене, трансформиране, прехвърляне и надзор на текст и процеси с инструментите, които се намират във всяка основна инсталация. Услугата ни Сигурност на Linux сървъра и Сървърна администрация съществува, за да не се запознавате с linux команди и умения за командни обвивки по трудния начин; ние се занимаваме с въвеждането, наблюдението и изненадите в три през нощта.