Удалить часть строки linux
Обновлено: 21.11.2024
В этой статье из серии sed мы увидим примеры того, как удалять символы из файла. Синтаксис замены команды sed:
Эта команда sed находит шаблон и заменяет его другим шаблоном. Когда поле замены остается пустым, найденный шаблон/элемент удаляется.
Давайте рассмотрим пример файла, как показано ниже:
1. Чтобы удалить определенный символ, произнесите «а».
Это удалит первое вхождение «а» в каждой строке файла. Чтобы удалить все вхождения 'a' в каждой строке,
2. Чтобы удалить 1-й символ в каждой строке:
.(точка) пытается найти соответствие одному символу. ^ пытается сопоставить шаблон (любой символ) в начале строки. Другой способ написать то же самое:
Это говорит о замене символа ничем. Поскольку по умолчанию sed начинается с начала, он заменяет только 1-й символ, так как 'g' не передается.
Символ $ пытается сопоставить шаблон в конце строки. <р>4. Чтобы удалить 1-й и последний символ каждой строки в одной команде:
две команды могут быть даны вместе с точкой с запятой, разделенной между ними. <р>5. Чтобы удалить первый символ, только если это определенный символ:
Это удаляет первый символ, только если это 'F'. <р>6. Чтобы удалить последний символ, только если это определенный символ:
Это удаляет последний символ, только если это 'x'. <р>7. Чтобы удалить первые три символа каждой строки:
Одна точка (.) удаляет первый символ, три точки удаляют первые три символа. <р>8. Чтобы удалить первые n символов каждой строки:
. -> соответствует любому символу n раз, поэтому приведенное выше выражение соответствует 4 символам и удаляет их. <р>9. Чтобы удалить последние n символов каждой строки: <р>10. Чтобы удалить все, кроме первых n символов в каждой строке:
.* -> соответствует любому количеству символов, а первые 3 совпадающих символа группируются с помощью круглых скобок. При замене при наличии \1 сохраняется только группа, а оставшаяся часть не учитывается. <р>11. Чтобы удалить все, кроме последних n символов в файле:
То же, что и в предыдущем примере, только с конца. <р>12. Чтобы удалить несколько символов, присутствующих в файле:
Чтобы удалить несколько символов, используется [] для указания символов, которые нужно удалить. Это удалит все вхождения символов a, o и e. <р>13. Чтобы удалить шаблон:
Можно удалить не только символ, но даже шаблон. Здесь «лари» удалены из «Соляриса». <р>14. Чтобы удалить только n-е вхождение символа в каждой строке:
По умолчанию sed выполняет действие только в 1-м вхождении. Если указано n, sed выполняется только при n-м вхождении шаблона. Вторая буква «u» в слове «Ubuntu» удалена. <р>15. Чтобы удалить все в строке, за которой следует символ: <р>16. Чтобы удалить все цифры, присутствующие в каждой строке файла:
5 означает все символы от 0 до 9, что означает, что все цифры будут удалены. <р>17. Чтобы удалить все буквы нижнего регистра, присутствующие в каждой строке:
[a-z] представляет диапазон букв нижнего регистра, поэтому все символы нижнего регистра удаляются. <р>18. Чтобы удалить все, кроме строчных букв:
^ внутри квадратных скобок отменяет условие. Здесь удаляются все символы, кроме строчных букв. <р>19. Чтобы удалить все буквенно-цифровые символы, присутствующие в каждой строке:
Все буквенно-цифровые символы удаляются. <р>20. Чтобы удалить символ независимо от регистра:
Указание как нижнего, так и верхнего регистра в скобках эквивалентно удалению символа независимо от регистра.
В моем скрипте bash есть строка и ее префикс/суффикс. Мне нужно удалить префикс/суффикс из исходной строки.
Например, предположим, что у меня есть следующие значения:
Как получить следующий результат?
Будьте очень осторожны, ссылаясь на так называемое Advanced Bash Scripting Guide; он содержит смесь хороших и ужасных советов.
10 ответов 10
Это задокументировано в разделе руководства «Расширение параметров оболочки»:
@static_rtti Нет, к сожалению, вы не можете вкладывать подстановку параметров таким образом. Я знаю, это позор.
В команде sed символ ^ соответствует тексту, начинающемуся с префикса $, а завершающий символ $ соответствует тексту, заканчивающемуся суффиксом $.
Адриан Фрювирт делает несколько хороших замечаний в комментариях ниже, но sed для этой цели может быть очень полезен. Тот факт, что содержимое $prefix и $suffix интерпретируется sed, может быть как хорошим, так и плохим — пока вы обращаете внимание, все должно быть в порядке. Красота в том, что вы можете сделать что-то вроде этого:
это может быть то, что вам нужно, и это более красиво и мощнее, чем подстановка переменных bash. Если вы помните, что с большой силой приходит большая ответственность (как говорит Человек-Паук), все должно быть в порядке.
Примечание относительно оболочки и использования ею строк:
Для приведенного конкретного примера также будет работать следующее:
<р>. но только потому, что:- echo не важно, сколько строк содержится в его списке аргументов, и
- В $prefix и $suffix нет пробелов
Как правило, рекомендуется заключать строку в командной строке в кавычки, потому что даже если она содержит пробелы, она будет представлена команде как один аргумент. Мы цитируем $prefix и $suffix по той же причине: каждая команда редактирования для sed будет передана как одна строка. Мы используем двойные кавычки, потому что они допускают интерполяцию переменных; если бы мы использовали одинарные кавычки, команда sed получила бы буквальный префикс $ и суффикс $, что, безусловно, не то, что нам нужно.
Обратите внимание, что я использую одинарные кавычки при установке префикса и суффикса переменных. Мы, конечно, не хотим, чтобы что-либо в строках интерпретировалось, поэтому мы заключаем их в одинарные кавычки, чтобы интерполяции не происходило. Опять же, в этом примере это может быть необязательно, но это очень хорошая привычка.
286, 4
у меня есть что-то подобное.
awk должен удалять 'te' только в том случае, если он присутствует в начале строки... в любом другом месте его следует игнорировать.
ожидаемый результат:
Тестировщик
12 296, 3 792
676, 217
286, 4
6 575 572
3 149 702
rbatte1
3 843 841
Более аккуратный способ в ksh — разбить переменную на слайсы, и это не порождает новый процесс. Если вы знаете, что "te" нужно удалить в начале, а "Id" в конце, то это просто так, как написал Scrutinizer:-
однако, если вы просто хотите обрезать любые два начальных и конечных символа, вам нужно использовать подстановочный знак ?:-
Робин
Ливерпуль/Блэкберн
Великобритания
Еще 10 обсуждений, которые могут вас заинтересовать
1. ОС Х (Apple)
Работа со строками
У меня есть строка, в которой я хочу извлечь все символы, следующие за тремя последовательными числами. Например, моя строка — J1705PEAN038TDMN, мне нужно получить TDMN. Моя строка может содержать несколько 3 последовательных чисел, мне нужно то, что следует за последним вхождением (9 ответов)
Обсуждение начато: gigagigosu
2. Программирование оболочки и создание сценариев
Работа со строками
Здравствуйте, не могли бы вы помочь с небольшим скриптом: Как разбить строку X1 на 3 строки Строка X1 может содержать 1 или несколько строк X1='A1:B1:C1:D1:A2:B2:C2:D2:A3:B3: C3:D3' Это вывод, который я хочу иметь: Z1='A1:B1:C1:D1' Z2='A2:B2:C2:D2' Z3='A3:B3:C3:D3' (5 ответов)
Обсуждение начато: vikus
3. Программирование оболочки и создание сценариев
Работа со строками
Я хочу сделать следующее: "Я не хочу идти в школу, потому что я сегодня болен". Я хочу соединить эти две строки, но только тогда, когда первая строка содержит не более 20 символов и заканчивается ничем или запятой, а вторая строка не более 15. 20 и 15 можно изменить в сценарии. Я знаю. (10 ответов)
Обсуждение начато: thailand
4. Домашние и курсовые вопросы
Операции со строками
Напишите программу-оболочку для отображения позиции правого-крайнего символа в данной входной строке. Пример: Ввод: RAHUL Вывод: L находится на 5-й позиции, также скажите мне, как подсчитать длину строки и как найти положение определенного символа в самой левой части. Домашнее задание. (0 ответов)
Обсуждение начато: sashwat2691
5. Программирование оболочки и создание сценариев
Операции со строками
Напишите программу-оболочку для отображения позиции правого-крайнего символа в данной входной строке. Пример: Ввод: RAHUL Вывод: L находится на 5-й позиции, также скажите мне, как подсчитать длину строки и как найти положение определенного символа в самой левой части. (1 ответ)
В этой статье мы обсудим, как удалить последний символ из строки в Linux.
В Linux существуют различные команды и методы, с помощью которых вы можете упростить эту задачу, если у вас есть базовые знания о командах в Linux. Здесь вы увидите различные команды, с помощью которых вы можете удалить последний символ строки в Linux.
Способ 1. Использование команды «Вырезать»
Синтаксис:
Пример:
Этот метод работает, когда вы знаете длину заданной строки. Сначала он берет строку и передает ее с помощью команды cut. Вы должны указать диапазон от начала строки до 2-го последнего символа строки. Он извлекает символы из этого диапазона, оставляя последний символ, и выводит результат на стандартный вывод.
Вывод:
Еще один способ — использовать опцию дополнения команды cut.
Синтаксис:
Пример:
В этом методе вы должны использовать опцию дополнения, присутствующую в команде cut. Команда дополнения может работать с байтами, символами и полями. Здесь мы используем символ -c. Итак, здесь мы предоставили (длина строки)-1 после команды -c, которая обрезает последний символ и печатает результат, оставляя последний символ строки.
Вывод:
Синтаксис:
В этом методе вы должны использовать команду rev. Команда rev используется для перестановки строки строки посимвольно. Здесь команда rev перевернет строку, а затем опция -c удалит первый символ. После этого команда rev снова перевернет строку, и вы получите результат.
Вывод:
Способ 2. Использование команды sed
Команда sed означает потоковый редактор. Это мощный инструмент, который используется для управления и редактирования потоков текста. Он также поддерживает регулярные выражения, которые можно использовать для сопоставления с образцом. Вы также можете использовать команду sed для удаления символов из строк.
В этом методе строка передается с помощью команды sed, и регулярное выражение используется для удаления последнего символа, где (.) соответствует одиночному символу, а $ соответствует любому символу, присутствующему в конце строки.
Вывод:
Способ 3. Использование awk
AWK – это язык сценариев, который используется для сопоставления с образцом и обработки текста. В основном он используется в качестве инструмента отчетности и анализа. Итак, теперь вы увидите, как мы можем использовать awk для удаления последнего символа из заданной строки.
Этот метод работает, поскольку наша заданная строка передается в awk, а затем в awk строка обрабатывается. Здесь длина ($0)-1 означает удаление последнего символа путем вычитания «1» из общей длины строки. В ходе этого процесса команда напечатает строку от 1-го символа до 2-го символа.
Читайте также: