009--test命令和grep作业及Sed作业awk作业和循环结构
一、test命令
-d :目录 test -d /boot
-s :文件长度 > 0、非空 test -s a.txt
-f :正规文件 test -f a.txt
-w :可写 test -w a.txt
-r :可读 test -r a.txt
-x :可执行 test -x a.txt
-L :符号连接
-u :文件有 suid 位设置
-z :空串
-n :非空串
-eq :等于 [ 50 -eq 50 ]
-ne :不等于 [ 50 -ne 60 ]
-gt :大于 [ 50 -gt 40 ]
-lt :小于 [ 50 -lt 60 ]
-ge :大于等于 [ 50 -ge 50 ]
-le :小于等于 [ 50 -le 50 ]
比较数字,使用(( ))
其他测试使用 [[ ]]
包含数字比较的混合测试,使用[[ expr1 && expr2 ]] (( expr1 || expr2 ))
du -sh /boot/ #查看文件大小
find / -type f #查看普通文件
find / -name "*.txt" #查看根下以.txt结尾的文件
find / -size +30M #找出根下大于30M的文件
find / -size +10M -size +30M #找出根下大于10M且小于30M的文件
grep -rl 'root' /test #在/test下找出含root名的文件
二、grep作业
-n:显示行号
-o:只显示匹配的内容
-q:静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容
-l:如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc
-A:如果匹配成功,则将匹配行及其后n行一起打印出来
-B:如果匹配成功,则将匹配行及其前n行一起打印出来
-C:如果匹配成功,则将匹配行及其前后n行一起打印出来
-c:如果匹配成功,则将匹配到的行数打印出来
-E:等于egrep,扩展
-i:忽略大小写
-v:取反,不匹配
-w:匹配单词
正则表达式及字符处理
目标文件/etc/passwd,使用grep命令或egrep
1.显示出所有含有root的行:
egrep "root" /etc/passwd
2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:
egrep -C 2 "bash" /etc/passwd
3. 显示出有多少行含有nologin。
egrep -c "nologin" /etc/passwd
4.显示出那些行含有root,并将行号一块输出。
egrep -n "nologin" /etc/passwd
5.显示出文件中
6.新建用户
   abominable
   abominate 
   anomie 
   atomize
 编写正则表达式,将他们匹配出来
egrep "a.omi(nabl|nat|z|)e" /etc/passwd
7.建四个用户
   Alex213sb
   Wpq2222b 
   yH438PIG 
   egon666 egon 
过滤出用户名组成是字母+数字+字母的行
egrep '^[a-Z]+[0-9]+[a-Z]+' /etc/passwd
8.显示出/etc目录下所有包含root的文件名
egrep -rl "/root" /etc
9. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行
grep -v '^#' /etc/ssh/sshd_config |grep -v '^ *$'
三、Sed作业:以/etc/passwd文件为模板
1,删除文件每行的第一个字符。
sed -r 's/^(.)(.*)/\2/' /etc/passwd
2,删除文件每行的第二个字符。
sed -r 's/^(.)(.)(.*)/\1\3/' /etc/passwd
3,删除文件每行的最后一个字符。
sed -r 's/(.*)(.)$/\1/' /etc/passwd
4,删除文件每行的倒数第二个字符。
sed -r 's/(.*)(.)(.)$/\1\3/' /etc/passwd
5,删除文件每行的第二个单词。
sed -r 's/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/\1\2\4/' /etc/passwd
6,删除文件每行的倒数第二个单词。
sed -r 's/([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)$/\1\3\4/' /etc/passwd
7,删除文件每行的最后一个单词。
sed -r 's/([^a-Z]+)([a-Z]+)$/\1/' /etc/passwd
8,交换每行的第一个字符和第二个字符。
sed -r 's/^(.)(.)(.*)/\2\1\3/' /etc/passwd
9,交换每行的第一个字符和第二个单词。
sed -r 's/^(.)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)/\4\2\3\1\5/' /etc/passwd
10,交换每行的第一个单词和最后一个单词。
sed -r 's/^([a-Z]+)([^a-Z]+)(.+)([^a-Z]+)([a-Z]+)$/\5\2\3\4\1/' /etc/passwd
11,删除一个文件中所有的数字。
sed -r 's/[0-9]+//g' /etc/passwd
12,删除每行开头的所有空格。
sed -r 's/^ *//g' /etc/passwd
13,用制表符替换文件中出现的所有空格。
sed -r 's/ /\t/g' /etc/passwd
14,把所有大写字母用括号()括起来。
sed -r 's/[A-Z]/(&)/g' /etc/passwd
15,打印每行3次。
sed 'p;p' /etc/passwd
16,隔行删除。
sed '1~2d' /etc/passwd
17,把文件从第2行到第5行复制到第7行后面。(选做题)
sed '1h;3,5H;7G' test
18,把文件从第2行到第5行移动到第7行后面。(选做题)
sed '2h;3,5H;7G' test
19,只显示每行的第一个单词。
sed -r 's/^([a-Z]+)([^a-Z]+)(.*)$/\1/' /etc/passwd
20,打印每行的第一个单词和第三个单词。
sed -r 's/^([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)$/\1\ \5/' /etc/passwd
四、awk作业
打印uid在30~40范围内的用户名。
awk -F: '$3>29&&$3<41{print $1}' /etc/passwd
打印第5-10行的行号和用户名
awk -F: 'NR>4&&NR<11{print $1,NR}' etc/passwd
打印奇数行
awk -F: 'NR%2{ print NR,$0}' /etc/passwd
打印偶数行
awk -F: '!(NR%2){print NR,$0}' /etc/passwd
打印字段数大于5的行
awk -F: 'NF>5{print NR,$0}' /etc/passwd
打印UID不等于GID的用户名
awk -F: '$3!=$4{print NR,$1}' /etc/passwd
if 结构
#!/bin/bash var='/etc/init.d'
#var='/dev/sda'
if [ -d $var ] #如果$var是目录文件,则输出$var is directory
then
echo "$var is directory"
elif [ -b $var ] #如果$var是block块,则输出$var is block
then
echo "$var is block"
elif [ -f $var ] #如果$var是正规文件,则输出$var is regular file
then
echo "$var is regular file"
else #以上都不满足则输出unknow
echo 'unknow'
fi #fi表示if语句结束
接收输入参数的if语句
#!/bin/bash
if [ -d $ ]                                  #$1表示输入的第一个参数
    then
        echo "$1 is directory"
elif [ -b $ ]
    then
        echo "$1 is block"
elif [ -f $ ]
    then
        echo "$1 is regular file" else echo 'unknown'
fi
while循环
#!/bin/bash
login=
while [ $login !=  ]
do
    read -p 'please input your name: ' name                 #输入用户名
    read -p 'please input your password: ' pwd              #输入密码
    if [ -z $name ] || [ -z $pwd ]                                  #判断输入是否有输入为空,返回继续循环
        then
            continue
    fi
    if [ $name == 'mu' ] && [ $pwd == '' ]              #匹配正确,则输出登录成功
        then
            echo 'login sucessful'
            login=                                                       #方便退出循环 fi done
练习while循环
#!/bin/bash
var1=AAA
var2=BBB
var3=CCC
while :
do
    clear #清屏
    echo -e "A:${var1}\nB:${var2}\nC:${var3}" #
    temp=$var1
    var1=$var2
    var2=$var3
    var3=$temp
    sleep 
done
资料来源:http://www.cnblogs.com/linhaifeng/p/6602149.html#_label4
009--test命令和grep作业及Sed作业awk作业和循环结构的更多相关文章
- grep家族、sed、awk
		一.grep家族 grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. 在上一次的博客中已经使用过egrep通过正则表达式来匹配正确IP地址,这里的用法就不多说了. f ... 
- Linux查找命令:grep,awk,sed
		grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具 ... 
- Linux高级命令 ==> find、grep、sed、awk
		一.find find命令用来在指定目录下查找文件.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将查找到的子目录和文件全部进行显示. 语法 find path ... 
- Shell常用工具find,grep,sed,awk,xargs命令
		最近学习shell命令,对grep,sed,awk命令有点混乱,故小结一下,巩固一遍. 注意:find , grep , sed, awk可使用基本正则表达式字符,find,grep,awk也支持扩展 ... 
- 几个常用的文本处理shell 命令:find、grep、sort、uniq、sed、awk
		find 文件查找 查找txt和pdf文件 find . \( -name "*.txt" -o -name "*.pdf" \) -print 查找所有字母开 ... 
- Linux基础-正则表达式整理---------------grep、sed、awk
		目录: Ⅰ:正则表达式 Ⅱ:作业 Ⅰ:正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 在lin ... 
- 三大文本处理工具grep、sed及awk的简单介绍
		grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ... 
- 正则、grep、sed、awk
		每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正則表達式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则仅仅使用于支持这样的表示法的工具,如:vi,grep,se ... 
- linux(5)--补充(管道|  /  重定向> /  xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)
		本节中正则表达式的工具程序 grep,sed和awk是重点,也是难点!!! 先补充一下一. 管道| / 重定向> / xargs 如:1. 管道和重定向的区别:具体可以见 http://www. ... 
随机推荐
- golang几种post请求方式
			get请求 get请求可以直接http.Get方法,非常简单. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func httpGet() { resp, err := h ... 
- paramiko使用exec_command执行rm -rf删除目录的坑
			paramiko删除目录后的上传操作请参考步骤1.2.3的说明 try: ssh = SSHClient(ip,user) sftpClient = ssh.getSftpClient() outpu ... 
- 关于 thinkPHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback
			Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback 关于thinkPHP rpc调 ... 
- CSS样式布局入门介绍,非常详尽
			转载自:http://wenboxz.com/archives/try-css-layout.html/ 
- DevExpress2011控件教程)编辑控件(comboBox,AspxCheckBox) 范例1
			DevExpress2011控件教程)编辑控件(comboBox,AspxCheckBox) 范例1 AspxCheckBox 是一个检查编辑控件去展示特殊条件是否关闭或者打开.它一般会展示Yes/N ... 
- 第一个MapReduce程序——WordCount
			通常我们在学习一门语言的时候,写的第一个程序就是Hello World.而在学习Hadoop时,我们要写的第一个程序就是词频统计WordCount程序. 一.MapReduce简介 1.1 MapRe ... 
- Codeforces 486E LIS of Sequence(线段树+LIS)
			题目链接:Codeforces 486E LIS of Sequence 题目大意:给定一个数组.如今要确定每一个位置上的数属于哪一种类型. 解题思路:先求出每一个位置选的情况下的最长LIS,由于開始 ... 
- vs2010配置VL_FEAT库
			VL_FEAT库是计算机视觉中的一个开源库,支持C/C++,Matlab,可以在http://www.vlfeat.org/下载. 本文主要讲一下VS2010中如何配置vl_feat库(算是对原文的一 ... 
- 1987年国际C语言混乱代码大赛获奖的一行代码
			macb() ? lpcbyu(&gbcq/_\021%ocq\012\0_=w(gbcq)/_dak._=}_ugb_[0q60)s+ 这是CoolShell博主之前做了一个非常有意思的在线 ... 
- sanic官方文档解析之ssl,debug mode模式和test(测试)
			1,ssl 示例: 可选择的SSLContent from sanic import Sanic import ssl context = ssl.create_default_context(pur ... 
