- sed в linux — примеры использования
- Примеры
- Фильтрация строк
- Замена по шаблону
- Удаление строк
- Извлечение подстрок
- Linux sed заменить первую строку
- Номер строки
- Примеры
- Ещё пример
- Удаление строки по контексту
- Удаление строки или нескольких строк в файле
- Объединение строк
- Объединение двух соседних строк попарно
- Как использовать sed для поиска и замены строки в файлах
- How to Use sed to Find and Replace String in Files
- В этой статье мы поговорим о том, как найти и заменить строки sed. Мы также покажем вам, как выполнять рекурсивный поиск и замену.
- Найти и заменить строку на sed
- Рекурсивный поиск и замена
- Вывод
- Как использовать sed для поиска и замены строки в файлах
- Найти и заменить строку с помощью sed
- Рекурсивный поиск и замена
- Выводы
sed в linux — примеры использования
Утилита sed это мощный потоковый редактор текста с поддержкой регулярных выражений. С помощью sed вы можете заменять шаблоны текста (причем непосредственно в файле!), удалять строки (элементы массива), выводить подходящие по маске строки (подобно grep). Редактор sed поддерживает применение нескольких команд и расширенный синтаксис регулярных выражений (при котором не нужно экранировать спец. символы).
Важно!
В sed нет поддержки опережающих и ретроспективных проверок в регулярках! Для замены с использованием расширенного синтаксиса regex используйте:
Внимание!
В sed довольно проблемно работать с символом перевода строки! Самое удобное решение — это:
В качестве разделителей можно использовать любые символы (напрмиер: # , @ ). Match части (которые внутри круглых скобок) доступны как \1 , \2 , \n .
Флаги строки-команды (указывать в конце маски):
Примеры
Фильтрация строк
Вывести строки 1-5:
Вывести файлы соответствующие маске:
Строки длиннее 80 символов:
Замена по шаблону
Вывести вхождения (matches) через табуляцию:
Заменить названия файлов (composer на composer-dev):
Заменить символы (regex):
Заменить URL в файле (штука в разделителях | , и -i для замены в файле):
Заменить параметр в конфиге:
Заменить значение в xml-конфиге:
Удалить начальные пробелы (аналог ltrim):
Удаление строк
Удалить из файла строку подходящую шаблону:
Удалить первую строку вывода:
Удалить строки от первой до соответствующей regex:
Примечание
По умолчанию необходимо экранировать все спец. символы в regex’ах, что крайне затрудняет чтение масок. Для того, чтобы экранировать спец.символы только в случае описания в тексте их самих — включите расширенный режим regex выражений с помощью опции -r .
Удалить пустые строки:
Удалить последние N=2 символа:
Извлечение подстрок
Вырезать / запомнить последние N=4 символа:
Источник
Linux sed заменить первую строку
Содержимое sec.csv выглядит примерно так:
фактически, это время в минутах и секундах или просто в секундах. Привести его к виду hh:mm:ss можно командой:
после чего данные выглядят так:
Отрицание указывается знаком » ! » в конце конструкции » /:/! «
Номер строки
Примеры
UNIX | SED |
---|---|
cat | sed ‘:’ |
cat -s | sed ‘1s / ^ $ / / p; / . / , / ^ $ / !d’ |
tac | sed ‘1!G;h;$!d’ |
grep | sed ‘/ patt / !d’ |
grep -v | sed ‘/ patt / d’ |
head | sed ’10q’ |
head -1 | sed ‘q’ |
tail | sed -e ‘:a’ -e ‘$q;N;11,$D;ba’ |
tail -1 | sed ‘$!d’ |
tail -f | sed -u ‘/ . / !d’ |
cut -c 10 | sed ‘s / \(.\)\<10\>.* / \1 / ‘ |
cut -d: -f4 | sed ‘s / \(\([ ^ :]*\):\)\<4\>.* / \2 / ‘ |
tr A-Z a-z | sed ‘y / ABCDEFGHIJKLMNOPQRSTUVWXYZ / abcdefghijklmnopqrstuvwxyz / ‘ |
tr a-z A-Z | sed ‘y / abcdefghijklmnopqrstuvwxyz / ABCDEFGHIJKLMNOPQRSTUVWXYZ / ‘ |
tr -s ‘ ‘ | sed ‘s / \+ / / g’ |
tr -d ‘\012’ | sed ‘H;$!d;g;s / \n / / g’ |
wc -l | sed -n ‘$=’ |
uniq | sed ‘N; / ^ \(.*\)\n\1$ / !P;D’ |
rev | sed ‘/ \n / !G;s / \(.\)\(.*\n\) / &\2\1 / ; / / D;s / . / / ‘ |
basename | sed ‘s,.* / ,,’ |
dirname | sed ‘s,[ ^ / ]*$,,’ |
xargs | sed -e ‘:a’ -e ‘$!N;s / \n / / ;ta’ |
paste -sd: | sed -e ‘:a’ -e ‘$!N;s / \n / : / ;ta’ |
cat -n | sed ‘=’ | sed ‘$!N;s / \n / / ‘ |
grep -n | sed -n ‘/ patt / <=;p;>‘ | sed ‘$!N;s / \n / : / ‘ |
cp orig new | sed ‘w new’ orig |
hostname -s | hostname | sed ‘s / \..* / / ‘ |
Ещё пример
Эта строка проходит в цикле по всем файлам в текущем каталоге, имена которых оканчиваются на .txt, и:
Для чего это? Вот для чего. Я разбил длинный dokuwiki-файл с командами линукс на мелкие файлы. Они получились вида:
Данная последовательность команд превратила их все в вид:
Удаление строки по контексту
Для удаления строки, содержащей определённый контекст, можно использовать следующую конструкцию:
Эта команда в файле notes.ini удаляет все строки, начинающиеся с AUTO_SAVE .
Удаление строки или нескольких строк в файле
Для удаления строки или нескольких строк в файле я использую следующую конструкцию:
Эта команда в файле удаляет вторую строку.
Эта команда в файле удалит десять строк начиная с пятой (включая пятую).
Объединение строк
Этот пример показывает, как можно объединить строки, разделённые возвратом каретки:
Объединение двух соседних строк попарно
Объединить попарно две строки, разделённые возвратом каретки:
Источник
Как использовать sed для поиска и замены строки в файлах
How to Use sed to Find and Replace String in Files
В этой статье мы поговорим о том, как найти и заменить строки sed. Мы также покажем вам, как выполнять рекурсивный поиск и замену.
Довольно часто при работе с текстовыми файлами вам нужно находить и заменять строки текста в одном или нескольких файлах.
sed может выполнять основные операции с текстом над файлами и входными потоками, такими как конвейеры. С sed его помощью вы можете искать, находить и заменять, вставлять и удалять слова и строки. Он поддерживает базовые и расширенные регулярные выражения, которые позволяют сопоставлять сложные шаблоны.
Найти и заменить строку на sed
Существует несколько версий sed , с некоторыми функциональными различиями между ними. macOS использует версию BSD, и большинство дистрибутивов Linux поставляются с sed предварительно установленной GNU по умолчанию. Мы будем использовать версию GNU.
Общая форма поиска и замены текста sed принимает следующую форму:
- -i — По умолчанию sed записывает свой вывод на стандартный вывод. Эта опция говорит sed редактировать файлы на месте. Если указано расширение (например, -i.bak), будет создана резервная копия исходного файла.
- s — Команда замены, вероятно, наиболее используемая команда в sed.
- / / / — разделитель персонажа. Это может быть любой символ, но обычно используется / символ косой черты ( ).
- SEARCH_REGEX — Обычная строка или регулярное выражение для поиска.
- REPLACEMENT — Строка замены.
- g — Глобальный флаг замены. По умолчанию sed файл читает построчно и изменяет только первое вхождение SEARCH_REGEX строки. Если указан флаг замены, все случаи будут заменены.
- INPUTFILE — Имя файла, для которого вы хотите выполнить команду.
Хорошей практикой является размещение кавычек вокруг аргумента, чтобы метасимволы оболочки не расширялись.
Давайте посмотрим примеры того, как использовать sed команду для поиска и замены текста в файлах с некоторыми из его наиболее часто используемых опций и флагов.
В демонстрационных целях мы будем использовать следующий файл:
Если вы опустите g флаг, будет заменен только первый экземпляр строки поиска в каждой строке:
С глобальным флагом замены sed заменяет все вхождения шаблона поиска:
Как вы могли заметить, в предыдущем примере подстрока foo внутри foobar строки также заменяется. Если это нежелательное поведение, используйте выражение word-boundery ( \b ) на обоих концах строки поиска. Это гарантирует, что отдельные слова не совпадают.
Чтобы сделать сопоставление с шаблоном нечувствительным к регистру, используйте I флаг. В приведенном ниже примере мы используем как g и I флаги:
Если вы хотите найти и заменить строку, содержащую символ-разделитель ( / ), вам нужно использовать обратную косую черту ( \ ), чтобы избежать косой черты. Например , чтобы заменить /bin/bash с /usr/bin/zsh вы будете использовать
Более простой и читаемый вариант — использовать другой символ-разделитель. Большинство людей используют вертикальную черту ( | ) или двоеточие ( : ), но вы можете использовать любой другой символ:
Вы также можете использовать регулярные выражения. Например, чтобы найти все 3-значные числа и заменить их строкой, которую number вы используете:
Еще одна полезная функция sed — вы можете использовать символ амперсанда, & который соответствует согласованному шаблону. Персонаж может быть использован несколько раз.
Например, если вы хотите добавить фигурные скобки <> вокруг каждого трехзначного числа, введите:
И последнее, но не менее важное: всегда полезно сделать резервную копию при редактировании файла с помощью sed . Для этого просто предоставьте расширение -i опции. Например, чтобы отредактировать file.txt и сохранить исходный файл, как file.txt.bak вы бы использовали:
Если вы хотите убедиться, что резервная копия создана, перечислите файлы с помощью ls команды:
Рекурсивный поиск и замена
Иногда вы хотите рекурсивно искать в каталогах файлы, содержащие строку, и заменять строку во всех файлах. Это можно сделать с помощью таких команд, как grep чтобы рекурсивно найти файлы в каталоге и передать имена файлов в sed .
Следующая команда будет рекурсивно искать файлы в текущем рабочем каталоге и передавать имена файлов в sed .
Чтобы избежать проблем с файлами, содержащими пробел в их именах, используйте -print0 опцию, которая указывает find печатать имя файла, за которым следует нулевой символ и направлять вывод в sed использование xargs -0 :
Чтобы исключить каталог, используйте -not -path опцию. Например, если вы заменяете строку в локальном git-репо, чтобы исключить все файлы, начинающиеся с точки ( . ), используйте:
Если вы хотите искать и заменять текст только в файлах с определенным расширением, вы должны использовать:
Другой вариант — использовать grep команду для рекурсивного поиска всех файлов, содержащих шаблон поиска, а затем передать имена файлов по адресу sed :
Вывод
Хотя это может показаться сложным и сложным, сначала поиск и замена текста в файлах sed очень просты.
Чтобы узнать о более sed команд, опции и флаги посетить GNU СЭД руководство и Grymoire СЭД учебник .
Источник
Как использовать sed для поиска и замены строки в файлах
При работе с текстовыми файлами вам часто нужно искать и заменять строки текста в одном или нескольких файлах.
sed является s Tream ред itor. Он может выполнять базовые операции с текстом над файлами и входными потоками, такими как конвейеры. С помощью sed вы можете искать, находить и заменять, вставлять и удалять слова и строки. Он поддерживает базовые и расширенные регулярные выражения, которые позволяют сопоставлять сложные шаблоны.
В этой статье мы поговорим о том, как найти и заменить строки с помощью sed . Мы также покажем вам, как выполнить рекурсивный поиск и замену.
Найти и заменить строку с помощью sed
Существует несколько версий sed с некоторыми функциональными различиями. macOS использует версию BSD, в то время как большинство дистрибутивов Linux поставляются с предустановленной по умолчанию GNU sed . Мы будем использовать версию GNU.
Общая форма поиска и замены текста с помощью sed имеет следующий вид:
- -i — По умолчанию sed записывает свой вывод в стандартный вывод. Эта опция указывает sed редактировать файлы на месте. Если указано расширение (например, -i.bak), создается резервная копия исходного файла.
- s — Заменяющая команда, вероятно, наиболее часто используемая команда в sed.
- / / / — Символ-разделитель. Это может быть любой символ, но обычно используется символ косой черты ( / ).
- SEARCH_REGEX — обычная строка или регулярное выражение для поиска.
- REPLACEMENT — строка замены.
- g — Флаг глобальной замены. По умолчанию sed читает файл построчно и изменяет только первое вхождение SEARCH_REGEX в строке. Если указан флаг замены, заменяются все вхождения.
- INPUTFILE — имя файла, для которого вы хотите запустить команду.
Рекомендуется заключать аргумент в кавычки, чтобы метасимволы оболочки не расширялись.
Давайте посмотрим, как мы можем использовать команду sed для поиска и замены текста в файлах некоторыми из наиболее часто используемых параметров и флагов.
В демонстрационных целях мы будем использовать следующий файл:
Если флаг g опущен, заменяется только первый экземпляр строки поиска в каждой строке:
С флагом глобальной замены sed заменяет все вхождения шаблона поиска:
Как вы могли заметить, подстрока foo внутри строки foobar также заменена в предыдущем примере. Если это нежелательное поведение, используйте выражение границы слова ( b ) на обоих концах строки поиска. Это гарантирует, что частичные слова не совпадают.
Чтобы сделать совпадение с шаблоном нечувствительным к регистру, используйте флаг I В приведенном ниже примере мы используем флаги g и I
Если вы хотите найти и заменить строку, содержащую символ-разделитель ( / ), вам нужно будет использовать обратную косую черту ( ), чтобы избежать косой черты. Например, чтобы заменить /bin/bash на /usr/bin/zsh вы должны использовать
Более простой и понятный вариант — использовать другой символ-разделитель. Большинство людей используют вертикальную полосу ( | ) или двоеточие ( : ) , но вы можете использовать любой другой символ:
Вы также можете использовать регулярные выражения. Например, чтобы найти все трехзначные числа и заменить их строковым number вы должны использовать:
Еще одна полезная функция sed заключается в том, что вы можете использовать символ амперсанда & который соответствует сопоставленному шаблону. Персонаж можно использовать несколько раз.
Например, если вы хотите добавить фигурные скобки <> вокруг каждого трехзначного числа, введите:
И последнее, но не менее важное: всегда рекомендуется делать резервную копию при редактировании файла с помощью sed . Для этого просто укажите расширение файла резервной копии для параметра -i . Например, чтобы отредактировать file.txt и сохранить исходный файл как file.txt.bak вы должны использовать:
Чтобы убедиться, что резервная копия создана, выведите список файлов с помощью команды ls :
Рекурсивный поиск и замена
Иногда может потребоваться рекурсивный поиск в каталогах файлов, содержащих строку, и замена строки во всех файлах. Это можно сделать с помощью таких команд, как find или grep для рекурсивного поиска файлов в каталоге и передачи имен файлов в sed .
Следующая команда будет рекурсивно искать файлы в текущем рабочем каталоге и передавать имена файлов в sed .
Чтобы избежать проблем с файлами, содержащими пробелы в своих именах, используйте параметр -print0 , который указывает find напечатать имя файла, за которым следует нулевой символ, и xargs -0 вывод в sed используя xargs -0 :
Чтобы исключить каталог, используйте параметр -not -path . Например, если вы заменяете строку в локальном репозитории git, чтобы исключить все файлы, начинающиеся с точки ( . ), Используйте:
Если вы хотите искать и заменять текст только в файлах с определенным расширением, вы будете использовать:
Другой вариант — использовать команду grep для рекурсивного поиска всех файлов, содержащих шаблон поиска, а затем передать имена файлов в sed :
Выводы
Хотя это может показаться сложным и сложным, поначалу поиск и замена текста в файлах с помощью sed очень просты.
Чтобы узнать больше о sed команд, опций и флагов, посетить GNU СЭД руководство и Grymoire СЭД учебник .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник