Получить последние 4 символа вывода из стандартного
У меня есть script, который работает и использует
lspci -s 0a.00.1
Это возвращает
0a.00.1 usb controller some text device 4dc9
Я хочу, чтобы эти последние 4 символа были такими, что
lspci -s 0a.00.1 | some command to give me the last 4 characters.
Ответы
Ответ 1
Как насчет tail
, с помощью переключателя -c
. Например, чтобы получить последние 4 символа "привет":
echo "hello" | tail -c 5
ello
Обратите внимание, что я использовал 5 (4 + 1), потому что символ новой строки добавляется echo
. Как предложил Брэд Кох ниже, используйте echo -n
, чтобы предотвратить добавление символа новой строки.
Ответ 2
Вам действительно нужны последние четыре персонажа? Похоже, вы хотите получить последнее слово на линии:
awk '{ print $NF }'
Это будет работать, если идентификатор - 3 символа или 5.
Ответ 3
Использование sed
:
lspci -s 0a.00.1 | sed 's/^.*\(.\{4\}\)$/\1/'
Вывод:
4dc9
Ответ 4
Попробуйте это, скажем, если строка хранится в переменной foo.
foo=`lspci -s 0a.00.1` # the foo value should be "0a.00.1 usb controller some text device 4dc9"
echo ${foo:(-4)} # which should output 4dc9
Ответ 5
Я обычно использую
echo 0a.00.1 usb controller some text device 4dc9 | rev | cut -b1-4 | rev
4dc9
Ответ 6
Если реальный запрос состоит в том, чтобы скопировать последнюю строку, разделенную пространством, независимо от ее длины, то лучшим решением, по-видимому, будет использование ... | awk '{print $NF}'
, как указано @Johnsyweb. Но если это действительно касается копирования фиксированного числа символов из конца строки, то существует bash -специфическое решение без необходимости ссылаться на любой дополнительный подпроцесс по трубопроводам:
$ test="1234567890"; echo "${test: -4}"
7890
$
Обратите внимание, что пространство между символом двоеточия и минусом имеет важное значение, так как без него будет доставлена полная строка:
$ test="1234567890"; echo "${test:-4}"
1234567890
$
Ответ 7
Попробуйте использовать grep
:
lspci -s 0a.00.1 | grep -o ....$
Это будет печатать последние 4 символа каждой строки.
Однако, если вы хотите иметь последние 4 символа всего вывода, используйте tail -c4
вместо этого.
Ответ 8
Еще один способ приблизиться к этому - использовать обозначение <<<
:
tail -c 5 <<< '0a.00.1 usb controller some text device 4dc9'
Ответ 9
вместо использования именованных переменных, разработайте практику использования позиционных параметров, например:
set -- $( lspci -s 0a.00.1 ); # then the bash string usage:
echo ${1:(-4)} # has the advantage of allowing N PP to be set, eg:
set -- $(ls *.txt)
echo $4 # prints the 4th txt file.