Самая полезная серия:
«Наиболее часто используемый набор навыков «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)