Как нарезать последние N байтов строки в Bash строки Chopping? - PullRequest
14 голосов
/ 23 июня 2009

например qa_sharutils-2009-04-22-15-20-39, хотите нарезать последние 20 байтов и получить 'qa_sharutils'.

Я знаю, как это сделать в sed, но почему $A=${A/.\{20\}$/} не работает?

Спасибо!

Ответы [ 6 ]

36 голосов
/ 23 июня 2009

Если ваша строка хранится в переменной с именем $ str, тогда вы получите подстроку без последних 20 цифр в bash

${str:0:${#str} - 20}

в основном, нарезка строк может быть сделана с использованием

${[variableName]:[startIndex]:[length]}

и длина строки

${#[variableName]}

EDIT: решение с использованием sed, которая работает с файлами:

sed 's/.\{20\}$//' < inputFile
2 голосов
/ 24 мая 2013

с использованием awk:

echo $str | awk '{print substr($0,1,length($0)-20)}'

или использование манипуляции со строками - echo $ {string: position: length}:

echo ${str:0:$((${#str}-20))}
1 голос
/ 26 июня 2013

аналогично substr ('abcdefg', 2-1, 3) в php:

echo 'abcdefg'|tail -c +2|head -c 3
1 голос
/ 24 июня 2009

Есть несколько способов выполнить основную задачу.

$ str="qa_sharutils-2009-04-22-15-20-39"

Если вы хотите удалить последние 20 символов. Выбор этой подстроки начинается с нуля:

$ echo ${str::${#str}-20}
qa_sharutils

"%" и "%%" для удаления с правой стороны строки. Например, если вам нужно базовое имя, за вычетом всего, что следует за первым «-»:

$ echo ${str%%-*}
qa_sharutils
1 голос
/ 23 июня 2009

В синтаксисе ${parameter/pattern/string} в bash, pattern - это шаблон в стиле подстановочного знака, а не регулярное выражение. В синтаксисе с подстановочными символами точка . является просто литеральной точкой, а фигурные скобки используются для соответствия выбору параметров (например, конвейер | в регулярных выражениях), поэтому эта строка просто удалит буквенную строку ".20".

0 голосов
/ 08 ноября 2009

только если ваши последние 20 байтов всегда являются датой.

$ str="qa_sharutils-2009-04-22-15-20-39"
$ IFS="-"
$ set -- $str
$ echo $1
qa_sharutils
$ unset IFS

или когда первая черточка и далее не нужны.

$ echo ${str%%-*}
qa_sharutils
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...