GNU sed

格式化数字

妖精的绣舞 提交于 2019-11-29 08:30:58
题目要求 输入一串随机数字,然后按千分位输出。 比如输入数字串为“123456789”,输出为123,456,789。 参考答案 #!/bin/bash n=`echo $1|wc -L` for d in `echo $1|sed 's/./& /g'` do n2=$[$n%3] if [ $n2 -eq 0 ] then echo -n ",$d" else echo -n "$d" fi n=$[$n-1] done |sed 's/^,//' echo 来源: https://my.oschina.net/u/3954059/blog/3104155

35.rsync工具介绍 常用选项 通过ssh同步

早过忘川 提交于 2019-11-29 08:09:56
10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync通过ssh同步 10.28 rsync工具介绍: linux文件同步工具rsync rsync很实用,也很重要 像我们从A机器到B机器,我们去传输文件、远程备份一些数据。 也可以从本机传输,像从A目录到B目录,类似于cp,但不一样 假设一个场景,我们要每小时从A目录拷贝到B目录一次,而A目录在不停的增加。这时候,我们用cp就不合适了,因为不方便浪费时间,还浪费磁盘不停的读写。而rsync就适合这种场景,他只同步一些更新的文件,还支持远程的同步(A级器到B机器) ~1. rsync -av /etc/passwd /tmp/123.txt 将passwd文件拷贝到tmp下,并改名叫123.txt [root@axinlinux-01 system]# rsync -av /etc/passwd /tmp/123.txt sending incremental file list passwd 输出文件 sent 1,071 bytes received 35 bytes 2,212.00 bytes/sec 发送了多少个字节 多少字节每秒 total size is 979 speedup is 0.89 一共有多大 速度是多少 ~2. rsync /etc/passwd root

根据名字得数字

血红的双手。 提交于 2019-11-29 07:31:29
题目要求 写一个shell脚本,能实现如下需求: 执行脚本后,提示输入名字(英文的,可以是大小写字母、数字不能有其他特殊符号),然后输出一个随机>的0-99之间的数字,脚本并不会退出,继续提示让输入名字 如果输入相同的名字,输出的数字还是第一次输入该名字时输出的结果 前面已经输出过的数字,下次不能再出现 当输入q或者Q时,脚本会退出。 参考答案 #!/bin/bash f=/tmp/user_number.txt j_n() { while : do n=$[RANDOM%100] if awk '{print $2}' $f|grep -qw $n then continue else break fi done } while : do read -p "Please input a username: " u if [ -z "$u" ] then echo "请输入用户名." continue fi if [ $u == "q" ] || [ $u == "Q" ] then exit fi u1=`echo $u|sed 's/[a-zA-Z0-9]//g'` if [ -n "$u1" ] then echo "你输入的用户名不符合规范,正确的用户名应该是大小写字母和数字的组合" continue else if [ -f $f ] then u_n=`awk -v

加减乘除

橙三吉。 提交于 2019-11-29 07:00:30
题目要求 写一个脚本: 计算100以内所有能被3整除的正整数的和 #!/bin/bash sum=0 for i in `seq 1 100` do j=$[$i%3] if [ $j -eq 0 ] then sum=$[$sum+$i] fi done echo $sum 题目要求 使用传参的方法写个脚本,实现加减乘除的功能。 例如: sh a.sh 1 2,这样会分别计算加、减、乘、除的结果。 要求: 脚本需判断提供的两个数字必须为整数 当做减法或者除法时,需要判断哪个数字大,减法时需要用大的数字减小的数字,除法时需要用大的数字>除以小的数字,并且结果需要保留两个小数点。 #!/bin/bash is_nu() { n=`echo $1 |sed 's/[0-9]//g'` if [ -n "$n" ] then echo "给出的参数必须是正整数" exit fi } if [ $# -ne 2 ] then echo "必须要输入两个参数" exit else is_nu $1 is_nu $2 fi big() { if [ $1 -gt $2 ] then echo $1 else echo $2 fi } small() { if [ $1 -lt $2 ] then echo $1 else echo $2 fi } add() { sum=$[$1+$2]

判断web服务

僤鯓⒐⒋嵵緔 提交于 2019-11-29 05:03:13
题目要求 写一个脚本判断你的Linux服务器里是否开启web服务?(监听80端口)如果开启了,请判断出跑的是什么服务 ,是httpd呢还是nginx又或者是其他的什么? 参考答案 #!/bin/bash n=`netstat -lntp |grep ':80 '|wc -l` if [ $n -eq 0 ] then echo "It not listen port 80" else ser=`netstat -lntp |grep ':80 '|awk -F '/' '{print $NF}'|sed 's/ //g'` echo "It is listenning port 80, and the service is $ser." fi 来源: https://my.oschina.net/u/3954059/blog/3101573

计算数字个数

感情迁移 提交于 2019-11-29 05:03:05
题目要求 计算文档a.txt中每一行中出现的数字个数并且要计算一下整个文档中一共出现了几个数字。例如a.txt内容如 下: 12aa*lkjskdj alskdflkskdjflkjj 我们脚本名字为 ncount.sh, 运行它时: bash ncount.sh a.txt 输出结果应该为: 2 0 sum:2 #!/bin/bash sum=0 while read line do line_n=`echo $line|sed 's/[^0-9]//g'|wc -L` echo $line_n sum=$[$sum+$line_n] done < $1 echo "sum:$sum" 来源: https://my.oschina.net/u/3954059/blog/3101565

封IP

前提是你 提交于 2019-11-29 00:46:09
题目要求 需求: 根据web服务器上的访问日志,把一些请求量非常高的ip给拒绝掉!并且每隔半小时把不再发起请求或者请求量很小的ip给解封。 假设: 一分钟内请求量高于100次的IP视为不正常请求。 访问日志路径为/data/logs/access_log。 用第2例中的1.log作为演示日志 核心要点 统计ip访问次数,排序 如何标记每隔半小时 iptables计数器是一个重要的判断指标 函数(封IP、解封IP) 参考答案 #!/bin/bash block_ip() { t1=`date -d "-1 min" +%Y:%H:%M` log=/data/logs/access_log egrep "$t1:[0-9]+" $log > /tmp/tmp_last_min.log awk '{print $1}' /tmp/tmp_last_min.log |sort -n |uniq -c|sort -n |awk '$1>100 {print $2}' > /tmp/bad_ip.list n=`wc -l /tmp/bad_ip.list|awk '{print $1}'` if [ $n -ne 0 ] then for ip in `cat /tmp/bad_ip.list` do iptables -I INPUT -s $ip -j REJECT done fi }

常用linux日志查询命令

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-29 00:42:06
1.查看实时日志: tail -f nohup.out 2.分页查看所有日志: cat nohup.out | more 4.分页查看前N行日志: tail -n 1000 nohup.out | more 5.查看实时日志并检索关键字: tail -f nohup.out | grep "关键字" 6.检索日志,并显示该条日志的前后N行记录: cat nohup.out | grep -n -B10 -A10 "关键字" 7.查看日志,从第1000行开始,显示500行: cat nohup.out | tail -n +1000| head -n 500 8.查看日志,显示1000行到1500行: ```shell cat nohup.out | head -n 1500| tail -n +1000 9.删除包括关键词的行:   sed -i '/关键词/d' nohup.out 来源: https://my.oschina.net/u/3915790/blog/3100013

17个案例带你3分钟搞定Linux正则表达式

与世无争的帅哥 提交于 2019-11-28 23:57:59
正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。 元字符通常在Linux中分为两类: Shell元字符,由Linux Shell进行解析; 正则表达式元字符,由vi/grep/sed/awk等文本处理工具进行解析; 正则表达式一般以文本行进行处理,在进行下面实例之前,先为grep命令设置--color参数: $ alias grep='grep --color=auto' 这样每次过滤出来的字符串都会带色彩了。 在开始之前还需要做一件事情,就是创建一个测试用的re-file文件,内容如下: $ cat re-file I had a lovely time on our little picnic. Lovers were all around us. It is springtime. Oh love, how much I adore you. Do you know the extent of my love? Oh, by the way, I think I lost my gloves somewhere out in that field of clover. Did you see them? I can only hope love. is forever. I live for you. It's hard to get back in the

删除字母和行

点点圈 提交于 2019-11-28 22:53:27
题目要求 把一个文本文档的前5行中包含字母的行删除掉,同时把6到10行中的全部字母删除掉。 核心要点 sed命令 #!/bin/bash sed -n '1,5'p 1.txt |sed '/[a-zA-Z]/d' sed '1,5d' 1.txt |sed '1,5s/[a-zA-Z]//g' 示例文件1.txt内容 1111111111111111111 121212aaasdasdf asdfasdfasdfasdfasdf 12121212aklsdfjaklsdfkjk *****#)#((@#*@)1121212 root@gitlba-aming shell100 12aaasdas23asdfasdf asdf;lkjas;lkdjfkl;ajsdf asl;dkfjalskdjflkj2elkjwlkej23kijlkjasdf laksjdflkjslkdjfslkdjflksjdf 21l3k2l3k2l3kjl2k3jl2k3j askdjfklasjdflklkajlksdjfkl12323232323 asdklfjalksdf asldkfjalksdjfalksdjfklasjdf2323 aslkdjflk2k3j2lk3jl2k3j asdklfjalksjdflkj132 asdfkjalksdjf121adfavasdfads