我有类似的东西:
xinput --list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Microsoft Basic Optical Mouse id=8 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Power Button id=7 [slave keyboard (3)]
↳ CHICONY HP Basic USB Keyboard id=9 [slave keyboard (3)]
我想得到身份证号码。 我尝试了类似awk -F'id =''[print $ 2}的内容,但是id号后面的文字仍在这里!我怎么只能得到身份证号码?
提前致谢。
答案 0 :(得分:2)
这可能不是最短的,但对于有awk
知识的人来说应该很容易理解:
awk '{ for (i = 1; i <= NF; i++) if ($i ~ /id=/) { print substr($i, 4); break; } }'
答案 1 :(得分:2)
尝试:
xinput --list | grep -Eo 'id=[0-9]+' | grep -Eo '[0-9]+'
或
xinput --list | grep -Eo 'id=[0-9]+' | awk -F= '{print $2}'
答案 2 :(得分:1)
单程
xinput --list | awk -F"id=" 'NF{split($2,a," ");print a[1]}' file
使用shell(bash)
#!/bin/bash
xinput --list | while read -r line
do
case "$line" in
*id=* )
line=${line##*id=}
echo ${line%% *}
esac
done
答案 3 :(得分:0)
尝试这样的事情:
xinput --list | while read line; do
ID=`echo ${line} | cut -d= -f2 | cut -d\[ -f1 | xargs`
echo ${ID}
done
答案 4 :(得分:0)
仅限Bash:
while read line ; do
if [[ $line =~ id=([[:digit:]]) ]] ; then
echo "${BASH_REMATCH[1]}"
fi
done < <( xinput --list )
答案 5 :(得分:0)
我用sed找到这些东西最简单,用组替换来捕获你想要的数据,并确保在正则表达式中匹配线的其余部分。
sed 's/.*id=\([0-9]*\).*/\1/'
答案 6 :(得分:0)
尝试:
cat x | awk -Fid= '{print $2}' | awk '{print $1}'