目录
1、shell在文本第一行和最后一行添加字符串
2、shell删除指定时间前的文件
3、Shell脚本 实现简单分割字符串
4、Shell脚本 8种字符串截取方法总结
5、shell清空文件内容
6、Shell 脚本等待上一行执行完成再执行下一行
方法1:
方法2:sleep
方法3:
7、Shell脚本统计文件行数的n种方法
1、shell在文本第一行和最后一行添加字符串
sed -i '1i\添加的内容' file #这是在第一行前添加字符串
sed -i '$i\添加的内容' file #这是在最后一行行前添加字符串
sed -i '$a\添加的内容' file #这是在最后一行行后添加字符串
用sed命令在行首或行尾添加字符的命令有以下几种:
假设处理的文本为test.file
在每行的头添加字符,比如"HEAD",命令如下:
sed 's/^/HEAD&/g' test.file
在每行的行尾添加字符,比如“TAIL”,命令如下:
sed 's/$/&TAIL/g' test.file
运行结果如下图:
几点说明:
1."^"代表行首,"$"代表行尾
2.'s/$/&TAIL/g'中的字符g代表每行出现的字符全部替换,如果想在特定字符处添加,g就有用了,否则只会替换每行第一个,而不继续往后找了
2、shell删除指定时间前的文件
需要配合find和rm两个命令完成
显示20分钟前的文件:
find /home/prestat/bills/test -type f -mmin +20 -exec ls -l {} \;
删除20分钟前的文件:
find /home/prestat/bills/test -type f -mmin +20 -exec rm {} \;
#查找30天以前的log文件
find /data/ -mtime +30 -name "*.log"
#查找30天以内的log文件
find /data/ -mtime -30 -name "*.log"
#查找第30天的log文件
find /data/ -mtime 30 -name "*.log"
#查找30分钟以前修改的log文件;
find /data/ -mmin +30 -name "*.log"
3、Shell脚本 实现简单分割字符串
我们有这样一个字符串:
info='abcd;efgh'
现在想获取abcd和efgh,我们可以简单地用cut工具来获取:
fstr=`echo $info | cut -d \; -f 1`
abcd
sstr=`echo $info | cut -d \; -f 2`
efgh
这里主要是用了cut工具的-d和-f参数:
-d:指定字段的分隔符,默认的字段分隔符为“TAB”;
-f:显示指定字段的内容;
关于cut工具其他参数可参考这里:cut命令
4、Shell脚本 8种字符串截取方法总结
假设有变量 var=http://www.aaa.com/123.htm.
1. # 号截取,删除左边字符,保留右边字符。
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm
2. ## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/
结果是 123.htm
3. %号截取,删除右边字符,保留左边字符
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.aaa.com
4. %% 号截取,删除右边字符,保留左边字符
echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
5. 从左边第几个字符开始,及字符的个数
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
6. 从左边第几个字符开始,一直到结束。
echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.aaa.com/123.htm
7. 从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
8. 从右边第几个字符开始,一直到结束。
echo ${var:0-7}
表示从右边第七个字符开始,一直到结束。
结果是:123.htm
注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
5、shell清空文件内容
6、Shell 脚本等待上一行执行完成再执行下一行
方法1:
假设command 1
执行需要1s,command 2
执行需要视当前资源占用率花费10s~30s不等,command 3
执行需要1s,则实现的代码如下:
#!/bin/sh
command 1
output=`command 2`
command 3
方法2:sleep
顺序执行(12秒执行完)
#!/bin/bash
date
for i in `seq 1 6`
do
{
echo "sleep 2"
sleep 2
}
done
date
并发执行并等待执行完成(2秒执行完)
#!/bin/bash
date
for i in `seq 1 6`
do
{
echo "sleep 2"
sleep 2
}&
done
wait #等待执行完成
date
#!/bin/bash
for ((i=0;i<5;i++))
do
sleep 3;echo a
done
#运行需要15秒。
#!/bin/bash
for ((i=0;i<5;i++))
do
{
sleep 3;echo a
} &
done
wait
#打开5个子进程并行,运行只需要3秒。
方法3:
- 若有for循环 在循环体之后使用wait sleep
#!/bin/bash
source ~/.bashrc
fun(){
echo "fun is begin.timeNum:$timeNum"
local timeNum=$1
sleep $timeNum &
wait #这个只等待wait前面sleep
echo "fun is end.timeNum:$timeNum"
}
7、Shell脚本统计文件行数的n种方法
方法一
awk '{print NR}' test1.sh|tail -n1
如图所示:
方法二
awk 'END{print NR}' test1.sh
如图所示:
方法三
grep -n "" test1.sh|awk -F: '{print '}|tail -n1
如图所示:
方法四
sed -n '$=' test1.sh
如图所示:
方法五
wc -l test1.sh
如图所示:
方法六
#cat test1.sh |wc -l
如图所示