В производственной среде Linux наиболее часто используемый набор навыков «Sed».

Linux Shell

Самая полезная серия:

«Наиболее часто используемый набор навыков «vim» в производственной среде Linux.

«Наиболее часто используемый набор навыков «Sed» в производственной среде Linux.

«Наиболее часто используемый набор навыков «AWK» в производственной среде Linux.

«Расширенные возможности «Сед»: мой маленький мозг вот-вот упадет в обморок»

sedКоманды широко используются, просты в использовании и являются мощным инструментом для быстрой обработки текста. На самом деле у него не так много навыков, и его повторение и использование — наиболее подходящий канал обучения. Навык. Но это сложно, потому что есть так много дополнительных функций. В этой статье не рассматриваются расширенные функции sed, а только объясняются некоторые часто используемые операции.

По мере использования вы найдете его иvimНекоторые концепции раскрыты, синтаксис регулярных выражений в основном такой же, а затраты на обучение невелики. С точки зрения личного видения и эффективности работы команда sed является важным инструментом, которым должны овладеть программисты.

Вот более продвинутый:Расширенные функции «Sed»: вам нужна машина состояний человека

Те, кто говорят, что могут использовать Google на месте, в основном привыкли копировать текст в Excel и потихоньку оттачивают свое мастерство. Дело не в том, что семья не входит в дом, эта статья написана не для вас.

Легкий старт

Как показано, простая команда sed состоит из трех основных частей:参数,范围,操作. Файл, которым нужно манипулировать, можно повесить прямо в конец командной строки. В дополнение к командной строке, sed также может указать сценарий sed через параметр -f Это расширенное использование, и мы не будем подробно его описывать.

Некоторые примеры команд я буду повторять много раз, если вы сообразительны, то сможете найти закономерность, а иногда и объяснять не надо.

параметр

-nЭтот параметр--quietили--silentзначение. Указывает, что выходные данные процесса выполнения игнорируются и выводятся только наши результаты.

Есть еще один параметр, который мы часто используем:-i.

После использования этого параметра все изменения будут выполняться в исходном файле. Ваш вывод перезапишет исходный файл.очень опасно, обязательно обратите внимание.

Сфера

1,4Указывает, что найдено содержимое строк 1, 2, 3 и 4 в файле. Обозначение этого диапазона очень духовное, см. следующий пример (пожалуйста, замените часть диапазона на рисунке самостоятельно).

5Выберите строку 5.

2,5Выберите от 2 до 5 строк из 4 строк.

1~2Выберите строки с нечетными номерами.

2~2Выберите четные строки.

2,+3и2,5Эффект тот же, всего 4 строчки.

2,$От второй строки до конца файла.

Выбор диапазона также может использовать обычное сопоставление. См. пример ниже.

/sys/,+3Выберите строку, в которой появляется слово sys, и следующие три строки.

/^sys/,/mem/Выберите строку, начинающуюся с sys, и данные между строкой, в которой появляется слово mem.

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

sed -n '5p' file
sed -n '2,5 p' file
sed -n '1~2 p' file
sed -n '2~2 p' file
sed -n '2,+3p' file
sed -n '2,$ p' file

sed -n '/sys/,+3 p' file
sed -n '/^sys/,/mem/p' file

действовать

Наиболее распространенной операцией являетсяp, что означает печать. Например, следующие две команды эквивалентны:

cat file 
sed -n 'p' file

Помимо печати, есть следующие операции, которые обычно используются нами.

pРаспечатайте соответствующий контент.

dУдалить соответствующий контент. Пришло время удалить-nпараметров, и подумайте, почему.

wНапишите соответствующий контент в другом месте.

a,i,cХотя операции являются базовыми, они редко используются и не будут представлены. Мы по-прежнему берем некоторые команды для иллюстрации.

sed -n '2,5 p' file
sed    '2,5 d' file
sed -n '2,5 w output.txt' file

заменить шаблон

ВышеsedОбычный режим сопоставления для команд, но он также имеет мощный режим замены, который означает поиск и замену некоторых значений и вывод результата. Использование шаблона замены используется редко-nпараметр.

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

Первая половина используется для сопоставления некоторых диапазонов, а вторая половина выполняет действие замены.

Сфера

Эта область аналогична синтаксису области выше. См. пример ниже.

/sys/,+3Выберите строку, в которой появляется слово sys, и следующие три строки.

/^sys/,/mem/Выберите строку, начинающуюся с sys, и данные между строкой, в которой появляется слово mem.

Конкретная команда:

sed '/sys/,+3 s/a/b/g' file
sed '/^sys/,/mem/s/a/b/g' file 

Заказ

Команда здесь относится к s. В этом смысл замены.

найти совпадение

Часть find найдет строку, которую нужно заменить. Эта часть может принимать либо чистые строки, либо регулярные выражения. См. пример ниже.

aНайти строку в строке диапазонаa.

[a,b,c]Найдите строку a или b или c из строки диапазона.

Команда похожа:

sed 's/a/b/g' file
sed 's/[a,b,c]/<&>/g' file
#这个命令我们下面解释

заменять

Пришло время заменить найденную строку. Содержимое этого раздела заменит то, что было найдено в разделе «Найти совпадения».

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

Но есть и расширенные функции. Подобно обычному API Java или Python, замена sed также имеетMatched PatternЗначение , вы также можете получить в группе, не вдаваясь в подробности. Обычно используемые заменители&.

**&**, повторить еще раз. При использовании в замещающей строке он представляет исходные данные соответствия поиска.

[&]Указывает, что найденные данные заключены в [].

"&"Указывает, что искомые данные окружены "".

Следующая команда заключит каждую строку в файле в кавычки.

sed 's/.*/"&"/' file

параметр флага

Эти параметры могут использоваться по отдельности или многократно, описаны только наиболее часто используемые из них.

gПо умолчанию сопоставляется только первое вхождение содержимого в строке. Чтобы заменить весь текст, добавьте g. Обычно используется.

pпри использовании-nпараметр,pБудет выведено только совпадающее содержимое строки.

wАналогичен описанному выше режиму w, но выводит только преобразованные строки.

iЭтот параметр более важен, так как указывает, что регистр игнорируется.

eУказывает, что для каждой выводимой строки выполняется команда. Не рекомендуется, вы можете использовать xargs для завершения этой функции.

Посмотрите на синтаксис двух команд:

sed -n 's/a/b/gipw output.txt' file
sed 's/^/ls -la/e' file

веселье

Из-за регулярности многие символы необходимо экранировать. ты многое сделаешь по сценарию\\,\*обработка и тому подобное. ты можешь использовать|^@!четыре символа на замену\. Например, следующие пять команд одинаковы.

sed '/aaa/s/\/etc/\/usr/g' file
sed '/aaa/s@/etc@/usr@g' file
sed '/aaa/s^/etc^/usr^g' file
sed '/aaa/s|/etc|/usr|g' file
sed '/aaa/s!/etc!/usr!g' file

Примечание. Первую половину диапазона нельзя использовать таким образом. Я привык использовать символы@.

разное

регулярное выражение

Как видите, регулярные выражения есть везде в командной строке. Ниже приводится краткое описание.

^начало строки

$конец линии

.один символ

*0 или более совпадений

+1 или более совпадений

?0 или 1 совпадение

{m}Предыдущее совпадение повторяется m раз

{m,n}Предыдущее совпадение повторяется от m до n раз

\escape-символ

[0-9]Соответствует любому символу в скобках, роли или |или, или

\bсоответствует слову. Например\blucky\bсоответствует только слову повезло

параметр я

Параметр i был кратко представлен выше, и его функция состоит в том, чтобы разрешить выполнение операции в исходном файле. Независимо от того, что вы выполняете, исходный файл будет перезаписан. Это очень опасно. При добавлении параметра можно создать резервную копию исходного файла.

sed -i.bak 's/a/b/' file

Приведенная выше команда подействует на исходный файл и сгенерирует файл file.bak. Настоятельно рекомендуется также указать файл bak с параметром i.

выполнять

Давайте посмотрим на мощь sed в сочетании с другими командами с помощью двух команд.

Строки вывода длиной не менее 50 символов.

sed -n '/^.{50}/p'

Подсчитайте, сколько раз каждое слово появляется в файле

sed 's/ /\n/g' file | sort | uniq -c

Найдите файлы py в каталоге, удалите все комментарии на уровне строки

find ./ -name "*.py" | xargs sed  -i.bak '/^[ ]*#/d'

Посмотрите на строки 5-7 и 10-13

sed -n -e '5,7p' -e '10,13p' file

выводить только ip адрес

ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9

End

Эта статья сотрудничает«Наиболее часто используемый набор навыков «vim» в производственной среде Linux.Одна статья, ищите лучше, найдете много похожего, это иKISSПринципы неразделимы. Другая сущность sed заключается в том, чтоx(Exchange), но также является расширенной функцией. Некоторые из них вы могли видеть во многих файлах Makefile. sed может даже сокобан игры писать.Хотя код классный,мозговой схемы не хватает.

https://github.com/aureliojargas/sokoban.sed

Дальнейшее чтение:

Linux «Остальная часть необитаемого острова» (1) Подготовка

Linux "Остальная часть необитаемого острова" (2) ЦП

«Остальная часть необитаемого острова» в памяти Linux (3)

Linux «Остальная часть необитаемого острова» (4) Ввод-вывод

Сетевая глава Linux «Остальная часть необитаемого острова» (5)