Intereting Posts
Получение IP-адреса веб-сайта с помощью «хоста»? Встроенное видео в формате PDF Я создал новую группу и нового пользователя. Затем я добавил пользователя в группу. Как я могу перейти к этому пользователю? Объединение файлов Java в папку с заголовком для каждого файла Beaglebone Black не может отправлять сырые пакеты UDP с Python на ноутбук под управлением Ubuntu 16.04 Извлечение строк по ключу из очень большого файла Ошибка с зависимостями выше ожидаемой Удалять файлы с одинаковым именем в конце файла Записывать исполняемые файлы и исполняемые файлы в openBSD Где находится файл конфигурации метода ввода? печатать пустую строку в sed output при передаче нескольких имен файлов Как отключить автообследование DVD-дисков в SLES 11 SP2? Использование регулярных выражений с cp OpenWRT на встроенном устройстве в качестве брандмауэра Рекурсивно редактировать файлы на основе имени родительского каталога

Как «отбрасывать» / удалять символы перед строкой?

У меня есть строка, которую я хотел бы манипулировать. Строка H08W2345678 как я смогу манипулировать ею, так что выход будет только W2345678 ?

Аналогично, если я хотел отбросить последние 4 символа из H08W2345678 чтобы получить H08W234 как бы я это сделал?

Просто используя bash:

 string="H08W2345678" echo "${string:3}" W2345678 echo "${string:0:-4}" H08W234 

См. Wooledge wiki для получения дополнительной информации о строковых манипуляциях .

 $ echo "H08W2345678" | sed 's/^.\{3\}//' W2345678 

sed 's/^.\{3\}//' найдет первые три символа по ^.\{3\} и заменит пустым. Здесь ^. будет соответствовать любому символу в начале строки ( ^ указывает начало строки), а \{3\} будет соответствовать предыдущему шаблону ровно 3 раза. Итак, ^.\{3\} будет соответствовать первым трем символам.

 $ echo "H08W2345678" | sed 's/.\{4\}$//' H08W234 

Аналогично, sed 's/.\{4\}$//' заменит последние четыре символа пустым ( $ указывает конец строки).

Если у вас есть файл, в котором каждая строка представляет собой одиннадцатисимвольную (или любую другую) строку, которую вы хотите вырезать, sed – это инструмент для использования. Это нормально для управления одной строкой, но это слишком много. Для одной строки ответ Джейсона, вероятно, лучший, если у вас есть доступ к bash. Однако синтаксисы ${ parameter : offset } и ${ parameter : offset : length } кажутся уникальными для bash (я не вижу их в спецификациях базы данных Open Group для командного языка командной оболочки ). Если вы застряли в не-bash POSIX-совместимой оболочке, вы можете использовать

 $ echo "${string#???}" W2345678 $ echo "${string%????}" H08W234 

и, если вы вообще не используете оболочку семейства Bourne (или используете древнюю систему pre-POSIX), они все равно должны работать:

 $ expr "$string" : '...\(.*\)' W2345678 $ expr "$string" : '\(.*\)....' H08W234