如何使用SED linux获取第一个数字

时间:2010-03-20 11:26:07

标签: linux bash sed

“00:02.0 VGA兼容控制器:InnoTek Systemberatung GmbH VirtualBox图形适配器” 如何在Bash脚本中使用SED获得第一个数字直到VGA? 谢谢!

8 个答案:

答案 0 :(得分:4)

$ s="00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter"
$ echo $s| sed 's/\(.*\)VGA.*/\1/'
00:02.0
$ echo $s| sed 's/\([0-9]\+:[0-9]\+.*\)VGA.*/\1/'
00:02.0
$ echo $s| sed 's/VGA.*//'
00:02.0

或awk

$ echo $s| awk '{print $1}'
00:02.0

答案 1 :(得分:4)

这也可以,但它依赖于你想要的数字之后的空格。

sed 's/ .*//'

答案 2 :(得分:2)

sed -e 's/\([0-9][0-9]:[0-9][0-9]\.[0-9]\).*/\1/'

将保留数字。

在脚本中,您可能会将管道返回给sed的字符串,例如

#!/bin/sh
echo "00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter" | sed -e 's/\([0-9][0-9]:[0-9][0-9]\.[0-9]\).*/\1/'

给出了

00:02.0

答案 3 :(得分:2)

使用awk代替sed会更简单,使用awk来实现你想要的东西:

echo '00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter' | awk '{print $1}'

比使用sed简单得多,不是吗?

答案 4 :(得分:2)

echo '00:02.0 VGA compatible bla bla bla' | sed -e 's/\(^[0-9:\.]*\).*/\1/'

答案 5 :(得分:1)

看起来您正在解析 lspci 输出。如果是这样,您可能需要查看应该更容易解析的-m选项。如果您打算使用默认输出格式的 sed ,那么您可以按照以下方式执行此操作:

echo '00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter' |
  sed -e 's/\([0-9a-fA-F][0-9a-fA-F]\):\([01][0-9a-fA-F]\)\.\([0-7]\) .*/\1 \2 \3/' |
  while read bus slot func; do 
    echo "bus: $bus; slot: $slot; func: $func"
  done

如果你真的只是读一行,你可以在没有while循环的情况下完成它,但是如果你真的想要解析 lspci 输出的多行,我会把它包括在内。

答案 6 :(得分:1)

X="00:02.0 VGA compatible ..."
set $X; echo $1

答案 7 :(得分:0)

尝试,sed -e 's/(^[0-9:.])./\1/' urfile