我有以下字符串
â â³ eGalax Inc. USB TouchController id=9 [slave pointer (2)]
â â³ eGalax Inc. USB TouchController id=10 [slave pointer (2)]
并想获取ID列表?如何使用sed或其他方法完成此操作?
答案 0 :(得分:34)
我将您示例的内容粘贴到名为so.txt
的文件中。
$ cat so.txt | awk '{ print $7 }' | cut -f2 -d"="
9
10
说明:
cat so.txt
会将文件内容打印到stdout
。 awk '{ print $7 }'
将打印第七列,即包含id=n
cut -f2 -d"="
将使用=
作为分隔符来削减步骤#2的输出并获取第二列(-f2
)如果您还想获得id=
,那么:
$ cat so.txt | awk '{ print $7 }'
id=9
id=10
答案 1 :(得分:3)
使用正则表达式捕获id号并用数字替换整行。像这样的东西应该这样做(匹配一切到“id =”,然后匹配任意数量的数字,然后匹配行的其余部分):
sed -e 's/.*id=\([0-9]\+\).*/\1/g'
为每一行执行此操作,您将获得ID列表。
答案 2 :(得分:2)
perl-solution:
perl -nE 'say $1 if /id=(\d+)/' filename
答案 3 :(得分:2)
$ ruby -ne 'puts $_.scan(/id=(\d+)/)' file
9
10
答案 4 :(得分:1)
您可以awk
在不使用cut
的情况下完成所有操作:
awk '{print substr($7,index($7,"=")+1)}' inputfile
您可以使用split()
代替substr(index())
。
答案 5 :(得分:0)
假设输入
{Anything}id={ID}{space}{Anything}
{Anything}id={ID}{space}{Anything}
-
#! /bin/sh
while read s; do
rhs=${s##*id=}
id=${rhs%% *}
echo $id # Do what you will with $id here
done <so.txt
或者如果它总是第7个字段
#! /bin/sh
while read f1 f2 f3 f4 f5 f6 f7 rest
do
echo ${f7##id=}
done <so.txt
另见