Удалить часть строки linux

Обновлено: 21.11.2024

В этой статье из серии sed мы увидим примеры того, как удалять символы из файла. Синтаксис замены команды sed:
Эта команда sed находит шаблон и заменяет его другим шаблоном. Когда поле замены остается пустым, найденный шаблон/элемент удаляется.

Давайте рассмотрим пример файла, как показано ниже:
1. Чтобы удалить определенный символ, произнесите «а».
Это удалит первое вхождение «а» в каждой строке файла. Чтобы удалить все вхождения 'a' в каждой строке,
2. Чтобы удалить 1-й символ в каждой строке:
.(точка) пытается найти соответствие одному символу. ^ пытается сопоставить шаблон (любой символ) в начале строки. Другой способ написать то же самое:
Это говорит о замене символа ничем. Поскольку по умолчанию sed начинается с начала, он заменяет только 1-й символ, так как 'g' не передается.

<р>3. Чтобы удалить последний символ каждой строки:
Символ $ пытается сопоставить шаблон в конце строки.

<р>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. Если вы помните, что с большой силой приходит большая ответственность (как говорит Человек-Паук), все должно быть в порядке.

Примечание относительно оболочки и использования ею строк:

Для приведенного конкретного примера также будет работать следующее:

<р>. но только потому, что:

  1. echo не важно, сколько строк содержится в его списке аргументов, и
  2. В $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-го символа.

Читайте также: