写点什么

Shell 文本处理一则

用户头像
wong
关注
发布于: 2020 年 06 月 03 日

遇到一个文本内容,需要做一些提取的处理。

记录一下遇到的 Shell 知识点。



文本内容(保存为一个tmpfile文件)

2020-05-01 20:59:56.914 - INFO - Clienteeeeion.HeartBeatTaeq - online_ueer[ehjxjq=0][411411=1a][exzwyx=1][ljye05=a][hbfyhy=0][qxj01=1][tthhhy=2][xzethy=1][qxj02=1][ljye01=a][jhlthy=2][105105=27][haha112=22][haha11a=11][haha114=26][xethb1=0][a02a02=14][jnbxyx=1][haha105=19][ejht01=0][haha107=26][qaacyx=0][cmwl10=1][haha101=2a][haha102=28][xethb2=0][haha10a=24][haha104=a0][601601=12][nexx01=1][717717=25][504504=25][haha011=19][qlpjhy=1][haha012=16][haha01a=18][haha014=21][zzhl06=1][htyx07=0][qlt01=2][qltql1=0][002002=21][475077=a][jnxphy=2][ehzx=0][412412=a1][tthhqm=1][zeej07=1][qlpjxy=1][qlt08=2][haha007=0][haha009=22][qajyqj=0][zeej0a=2][ejyqyx=1][zeej04=1][404404=19][haha001=19][haha002=17][haha004=17][qlwe01=0][haha005=16][qlwe02=0][htyx01=1][hljw08=2][415415=1a][jjyyx1=1][hljw01=1][jjyyx2=1][401401=2a][qlpjbx=1][qajy0a=2][101101=22][ehel02=1][qajy04=7][qlt007=0][qajy01=a][qajy02=1][ehel01=1][qajy05=6][qlt006=0][qajy06=2][qlt005=a][mxexlt=1][byxq01=1][byxq02=1][hwje07=2][hwje0a=4][hwje01=1][zwqj02=1][eyxxje=1][zwqj01=0][001001=20][qaac02=0][ehbehy=0][qarzhl=1][ehjfyx=0][qaac0a=1][qaac01=1][qlhbhy=1][qlpjje=1][qbphy=0][511511=19][qlpjjq=1][wxtxyx=a][exmy=1][hljwew=1][a11a11=10][jtjyx=0][jjyhy1=1][88810a=5][hbfy01=1][888104=7][tthh01=1][qljxhx=0][wjyx=0][eqhc07=0][eqhc08=0][exjeyx=0][qlje09=a][xjhl05=1][xjhl02=1][ljyehn=6][zhej88=1][004004=18][ljyehy=7][414414=15][yxmjx=0][201201=a0][qaczhy=0][eeyzx2=1][ljyeyx=2][zwxx04=2][zzhlxj=2][402402=22][eqhc0a=0][hbec08=1][qlpj14=0][xzhb02=0][qlpj15=0][005005=25][qlpj10=1][qlpj12=0][zwxx02=1][zyhz08=0][zyhz07=a][qlyjex=0][qlhlj1=0][qattjr=1][xzhb04=1][107107=a7][zyhz0a=1][qnqjhy=0][qlpj08=0][qlpj09=1][jeyyx=5][qlpj0a=0][qlpj04=1][ahyjyx=0][qlpj01=1][jnxp06=0][qlpj02=2][wjyjy=1][501501=17][yxce12=0][102102=27][ahyjhy=0][cztchb=1][888a04=0][zwqjhy=0][00a00a=19][hljwxx=0][ehjx01=1][ehjx02=0][202202=21][jjywl=1][ejyq02=1][qajyhb=1][zwqjyx=1][51a51a=14][109109=aa][ytj102=0][qlyxzh=1][jjxt04=1][ytjwl2=1][104104=a0][qaachy=2][ezeyyx=1][41a41a=14][xetyx=1][qajjxt=9][wxtxqa=1][hbjq02=1][jtj01=0][jjxt02=1][qarz04=1][jjxt01=1][ehet02=1][jtj0a=0][ejec02=0][jtj02=1][qljxhb=0][40a40a=14][10a10a=a2][61a61a=25][hbyfyx=1][ezeyhy=1][myyx=0][xethy=0][hbmlhy=1][ehjf01=0][xetjbx=0]

需求

1. 获取[]中的内容,代表了账号的连接数。

2. 把账号和连接数分解成2个字段数据。

3. 分解后的账号和连接数字段数据,重新拼接为1个长的字符串。



shell命令知识点



  1. sed文本替换,把"]["替换为"|"。

# 注意"]["的转义
sed -i 's/\]\[/\|/g' $tmpfile
  1. sed文本替换,把最后一个"]"删除。

# 注意"]"的转义
sed -i 's/\]//g' $tmpfile
  1. sed文本替换,把包括"online_user["之前的字符串都删除。

# sed 使用正则
sed -i 's/.*online_user\[//g' $tmpfile
  1. 计算"|"分割的账号连接数数据个数。

# 使用grep -o 参数,计算"|"分割的数量
num=`grep -o "|" $tmpfile | wc -l`
# 为后续的循环做准备
num=${num}+1
  1. 循环获取账号连接数数据,拼接为1个长字符串。

for ((i=1;i<=$num;i++));
do
res=`cut -d'|' -f$i $tmpfile`
#echo $res
account=`echo $res | awk -F'=' '{print$1}'`
connnum=`echo $res | awk -F'=' '{print$2}'`
body=${account}${connnum}","${body}
done
echo $body



参考站点

https://qastack.cn/unix/136794/how-to-use-sed-to-replace-all-characters-before-colon

http://c.biancheng.net/view/1114.html

https://www.cnblogs.com/zmlctt/p/3770618.html



发布于: 2020 年 06 月 03 日阅读数: 47
用户头像

wong

关注

人生充满黑色幽默 2017.10.24 加入

一名工程师

评论

发布
暂无评论
Shell 文本处理一则