BASH:从标准输出,内联获取输出的最后4个字符

bin*_*281 31 linux bash shell character

我有一个正在运行和使用的脚本

lspci -s 0a.00.1 
Run Code Online (Sandbox Code Playgroud)

这回来了

0a.00.1 usb controller some text device 4dc9
Run Code Online (Sandbox Code Playgroud)

我希望得到最后4个字符内联

lspci -s 0a.00.1 | some command to give me the last 4 characters. 
Run Code Online (Sandbox Code Playgroud)

Die*_*ego 79

怎么样tail,用-c开关.例如,要获取"hello"的最后4个字符:

echo "hello" | tail -c 5
ello
Run Code Online (Sandbox Code Playgroud)

请注意,我使用了5(4 + 1),因为添加了换行符echo.正如下面的Brad Koch所建议的,用于echo -n防止添加换行符.

  • `echo -n`会阻止添加新行字节. (3认同)
  • 在我的bash中,你不能在"-c"和"5"之间留一个空格.它必须是"tail -c5",而不是"tail -c 5". (3认同)

Joh*_*web 17

你真的想要最后四个角色吗?看起来你想要最后一行"单词":

awk '{ print $NF }'
Run Code Online (Sandbox Code Playgroud)

如果ID为3个字符或5,则此方法有效.


Bir*_*rei 6

使用sed:

lspci -s 0a.00.1 | sed 's/^.*\(.\{4\}\)$/\1/'
Run Code Online (Sandbox Code Playgroud)

输出:

4dc9
Run Code Online (Sandbox Code Playgroud)


Min*_*Shi 6

试试这个,比如字符串是否存储在变量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
Run Code Online (Sandbox Code Playgroud)