以下包括:awk、 xargs、nohup、sleep、history时间、date、sed、wc、expr、tee
awk
例: ps -ef|grep java|grep flume|awk '{print $2;}'|xargs kill -9
讲解 :AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
awk '{[pattern] action}' {filenames} # 行匹配语句 awk '' 只能用单引号
$ awk '{print $1,$4}' log.txt
https://www.runoob.com/linux/linux-comm-awk.html
xargs
例: ps -ef|grep java|grep flume|awk '{print $2;}'|xargs kill -9
讲解 :xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具 。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数 ,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
find /sbin -perm +700 |ls -l #这个命令是错误的
find /sbin -perm +700 |xargs ls -l #这样才是正确的
xargs 其他应用
假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接:
# cat url-list.txt | xargs wget -c
https://www.runoob.com/linux/linux-comm-xargs.html
nohup nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
2>&1 解释:
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。
0 – stdin (standard input,标准输入) 1 – stdout (standard output,标准输出) 2 – stderr (standard error,标准错误输出) sleep sleep 1 ##睡眠1秒 sleep 1s ##睡眠1秒 sleep 1m ##睡眠1分 sleep 1h ##睡眠1小时
#!/bin/sh /opt/tomcat/bin/shutdown.sh sleep 3 #等3秒后执行下一条 /opt/tomcat/bin/startup.sh
history 增加时间显示 https://blog.csdn.net/hello_java_lcl/article/details/107337226
date
1.SHELL脚本 中date的使用
#(1)最简单的使用
echo "今天日期是: `date +%Y%m%d`"
今天日期是:20180824
#(2)时间变量的使用
#!/bin/bash
echo "时间是:`date '+%Y%m%d %H:%M:%S'`"
echo "时间是:`date '+%Y-%m-%d %H:%M:%S'`"
时间是:20180824 08:11:17
时间是:2018-08-24 08:11:49
#(3)简单的shell脚本
#在当前目录下面创建当天日期的目录
##written by 2018-8-24
#!/bin/bash
guoch=`date +%Y%m%d`
mkdir ${guoch}
#(4)前一天的日期
#前一天的日期
#(今天是24号)
echo "`date -d "-1 day" +%d`"
结果是:23
#前一小时
#当前是16点 echo "`date -d "-1 hour" +%H`"
结果是:15
#前一分钟
echo "`date -d "-1 min" +%M`"
#前一秒钟
echo "`date -d "-1 second" +%S`"
#(5)学习日期变量的简单应用
#!/bin/bash ##In this Script we will use variables ##Writen by 2018-08-24
d1=`date +%H:%M:%S` echo "The Script begin at $d1" echo "Now we will sleep 2s" sleep 2 #休眠2秒 d2=`date +%H:%M:%S` echo "The Script end at $d2"
功能:
#!/bin/bash
set -e
ret=$(cat ../tables_ruitong|wc -l)
i=1
while [ $i -le $ret ]
do
row=$(sed -n "$i,0p" ../tables_ruitong)
## do something
i=`expr $i + 1`
done
sed Linux sed 命令是利用脚本来处理文本文件 。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
例子:row=$(sed -n " $i,0p " tables_1 )
查看行:$i--变量,$i,0p -- 变量数字代表的当前行
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明 :
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。 -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。 -h或--help 显示帮助。 -n或--quiet或--silent 仅显示script处理后的结果。 -V或--version 显示版本信息。
动作说明 :
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~ c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚; i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行); p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~ s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
举例:
利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
[root@www ~]# cat regular_express.txt
runoob!
google!
taobao!
facebook!
zhihu-
weibo-
利用 sed 直接在 regular_express.txt 最后一行加入 # This is a test :
[root@www ~]# sed -i '$a # This is a test' regular_express.txt
[root@www ~]# cat regular_express.txt
runoob!
google!
taobao!
facebook!
zhihu-
weibo-
# This is a test
由於 $ 代表的是最后一行,而 a 的动作是新增 ,因此该文件最后新增 # This is a test !
sed 的 -i 选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!
wc Linux wc命令用于计算字数 。
利用wc指令我们可以计算文件的Byte数、字数、或是列数 ,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
语法
wc [-clw][--help][--version][文件...]
参数 :
-c或--bytes或--chars 只显示Bytes数。 -l或--lines 只显示行数。 -w或--words 只显示字数。 --help 在线帮助。 --version 显示版本信息。
实例
使用 wc统计,结果如下:
$ wc testfile # testfile文件的统计信息
3 92 598 testfile # testfile文件的行数为3、单词数92、字节数598
其中,3 个数字分别表示testfile文件的行数、单词数,以及该文件的字节数。
如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2,可使用如下命令:
wc testfile testfile_1 testfile_2 #统计三个文件的信息
输出结果如下:
$ wc testfile testfile_1 testfile_2 #统计三个文件的信息
3 92 598 testfile #第一个文件行数为3、单词数92、字节数598
9 18 78 testfile_1 #第二个文件的行数为9、单词数18、字节数78
3 6 32 testfile_2 #第三个文件的行数为3、单词数6、字节数32
15 116 708 总用量 #三个文件总共的行数为15、单词数116、字节数708
expr expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。
语法 expr 表达式
表达式说明:
用空格隔开每个项; 用 / (反斜杠) 放在 shell 特定的字符前面; 对包含空格和其他特殊字符的字符串要用引号括起来 实例 1、计算字串长度
> expr length “this is a test”
14
2、抓取字串
> expr substr “this is a test” 3 5
is is
3、抓取第一个字符数字串出现的位置
> expr index "sarasara" a
2
4、整数运算
> expr 14 % 9
5
> expr 10 + 10
20
> expr 1000 + 900
1900
> expr 30 / 3 / 2
5
> expr 30 \* 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义)
90
> expr 30 * 3
expr: Syntax error
tee Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
语法 tee [-ai][--help][--version][文件...] 参数 :
-a或--append 附加到既有文件的后面,而非覆盖它. -i或--ignore-interrupts 忽略中断信号。 --help 在线帮助。 --version 显示版本信息。 举例:
sh $path/sqoopjob_delete.sh 2>&1 | tee -ai /home/huser/sh_starts/logs/rtdata-sqoop_upload_`date +\%Y\%m\%d`.log