shell 截取字符串(cut, sed, awk)
cut
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d:自定义分隔符,默认为制表符。
-f:与-d一起使用,指定显示哪个区域。
-n:取消分割多字节字符。仅和-b标志一起使用。如果字符的最后一个字节落在由-b标志的List参数指示的范围之内,该字符将被写出;否则,该字符将被排除。
-b
.eg1:然后调用cut,即剪切字符串中的第2和第5个字节。
echo"123abc"|cut -b 2,5
-----------------------
输出为2b
eg2:cut掉11-14位置的字符
echo "123456789abcdefghjklmnopq" | cut -b 11-14
-----------------------------------------------
输出为bcde
-c
用法示例输出/etc/passwd文件每一行的前4个字符$ sudo cut -c 1-4 /etc/passwd
-d
cut命令用于列提取,默认分隔符是tab键。
选项:-d指定分隔符,-f指定提取第几列
eg1: 以%作为分隔符 输出第一个%前的区域1的东西,输出区域2的东西
root@ROUTER:~# echo "CPU: busy 14% (system=10% user=3% nice=0% idle=85%)" | cut -d \% -f 1
CPU: busy 14
root@ROUTER:~# echo "CPU: busy 14% (system=10% user=3% nice=0% idle=85%)" | cut -d \% -f 2
(system=10
root@ROUTER:~# echo "CPU: busy 14% (system=10% user=3% nice=0% idle=85%)" | cut -b 11-14 | cut -d \% -f 1
14
root@ROUTER:~# echo "CPU: busy 14% (system=10% user=3% nice=0% idle=85%)" | cut -b 11-14
14%
sed
eg1:去除文本中的所有数字
sed 's/[0-9]//g'
[0-9]匹配一个数字,
s/A/B/ 将A替换为B
g表示全局替换为空格
eg2:取当前的接口的ip,把所有的:替换为空格,然后打印出空格为分割的第几个数
root@Evelyn:~# ifconfig ens33 | grep Bcast | sed 's/:/ /g' | awk '{print $3}'
192.168.23.44
eg3:取出延时时间的数字
ping 192.168.120.1 -s 1000 -c 5 | grep time | sed 's/=/ /g' | awk '{print $10}'
awk
语法格式:awk '条件1{动作1}条件2{动作2}...' 文件
条件,一般使用关系表达式作为条件,如a>10。动作,格式化输出或流程控制语句
awk一次读入一整行,默认以tab键或者空格为分隔符将一行分为多个字段,表示为$1、$2、$3...其中$0表示文件名
start_line=`grep -in 'set task group' $ROOTPATH/../../core/helloworld.c |awk 'BEGIN {FS=":"} {print $1}'`