Как я могу удалить первые X символов из строки с помощью sed?


Я пишу сценарий оболочки для встроенного Linux в небольшой промышленной коробке. У меня есть переменная, содержащая текст pid: 1234 и я хочу удалить первые X символов из строки,так что только 1234 остается. У меня есть больше переменных, которые мне нужно "очистить", поэтому мне нужно вырезать X первых символов и ${string:5} не работает по какой-то причине в моей системе.

единственное, что коробка, кажется, есть sed.

Я пытаюсь сделать следующее работа:

result=`echo "$pid" | sed 's/^.{4}//g'`

какие идеи?

9 83

9 ответов:

Это тоже работа:

echo "$pid"|awk '{print }'

следующее должно работать:

var="pid: 1234"
var=${var:5}

вы уверены bash оболочка выполняет ваш скрипт?

даже POSIX-совместимый

var=${var#?????}

было бы предпочтительнее использовать внешний процесс, хотя это требует от вас жесткого кода 5 в виде шаблона фиксированной длины.

вот краткий метод, чтобы вырезать первые X символов с помощью cut(1). В этом примере удаляются первые 4 символа.

echo "$pid" | cut -c 4-

использовать ("использовать расширенные регулярные выражения в скрипте") к sed чтобы использовать {n} синтаксис:

$ echo 'pid: 1234'| sed -r 's/^.{5}//'
1234

скорее всего, у вас будет cut как хорошо. Если так:

[me@home]$ echo "pid: 1234" | cut -d" " -f2
1234

вырезать первые два символа из строки:

string="1234567890"; echo "${string:2}"

трубы через awk '{print substr(,42)}' где 42-это на один больше, чем количество символов для удаления. Например:

$ echo abcde| awk '{print substr(,2)}'
bcde
$

другим способом, используя cut вместо sed.

result=`echo $pid | cut -c 5-`

вместо того, чтобы удалять n символов с самого начала, возможно, вы могли бы просто извлечь цифры напрямую. Вот так...

$ echo "pid: 1234" | grep -Po "\d+"

Это может быть более надежным решением, и кажется более интуитивным.