“00:02.0 VGA兼容控制器:InnoTek Systemberatung GmbH VirtualBox图形适配器” 如何在Bash脚本中使用SED获得第一个数字直到VGA? 谢谢!
答案 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)
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