Linux 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 СЭД учебник .

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Читайте также:  Vipnet csp для линукс
Оцените статью