在很多情况下我们需要提取某个变量下的某个字段,linux提供了很多的命令来处理这种情况。在这里只提供一个解决问题的思路,对于具体的命令下使用何参数,根据情况而定,除了利用man命令,还可以上网查阅相应的资料,以/etc/passwd为例获取用户所在组:
root:x:0:0:root:/root:/bin/csh
方法一:
使用cut命令
cat /etc/passwd | head -1 | cut -d : -f 5
方法二:
使用sed命令,注意该命令只能在shell脚本下才能运行,相关例子请参考Linux sed命令详细详解
sd=`cat /etc/passwd | head -1 | sed 's/:/ /g'`
set -- $sd //在没有任何选项的情况下,会将结果的值依次赋给位置参数的值
echo $5
方法三:
使用awk命令,相关例子请参考linux awk命令详解
cat /etc/passwd | head -1 | awk -F : '{print $5}'
方法四:
使用展开运算符(替换符号),形如:${variable#pattern}、${variable##pattern}、${variable%pattern}、${variable%%pattern},注意该命令只能在shell脚本下才能运行。相关例子请参考Linux shell脚本的字符串截取,在这里利用了这个字符串本身的特性进行处理
p=`cat /etc/passwd | head -1`
subp=${p##*[0-9]{1,}:} //从左边开始最长匹配,删除整数与:结合的之前所有字段
echo ${subp%%:*} //从右边开始最长匹配,删除:之后的所有字段