Linux Shell基础

内核在系统引导所时载入内存,内核以外的其他程序(shell 等)都保存在磁盘上,这些程序被内核加载到内存中运行,内核管理系统直至关机。shell是用户与内核之间的一个接口。shell解释命令实现用户与内核交互。(脚本文件)

环境变量:

zlm@ubuntu:~$ PATH=$PATH:/home/zlm

zlm@ubuntu:~$ export PATH这样就加入环境变量了

通配符和正则表达式元字符:

通配符是Linux系统本身就支持的,一般是用来通配文件名,而正则表达式需要某些文本过滤工具支持vi grep sed awk,用来匹配字符串

  •         正则表达式元字符:vi grep awk sed
^       /^love  查找以love开头的匹配            (行首定位符)
$       /love$  查找以love结尾的匹配            (行尾定位符)
.       /l..e   查找l和e之间两个任意字符的匹配  (匹配单个字符)

*       /l.*e   查找l和e之间任意个任意字符的匹配(匹配0个或多个*前的字符)

        /l*e    查找e前边有0个或者多个l的匹配

[]    /[Ll]ove  [a-z] [^a-z]    其中[^]表示不匹配其中的字符

\                                               (转义字符)
\<      /\<love 单词的开始是love                (词首定义符)
\>      /love\> 单词的末尾是love                (词尾定义符)
        (注意:^是一行的开始 \<是从每个空格开始)
        (注意:$是一行的结束 \>是到每个空格结束)
x\{m\}  字符x出现m次
x\{m,\} 字符x出现至少m次
x\{m,n\}字符x出现m到n次

  •         shell通配符:shell 命令中
?      匹配一个字符
*       匹配0个或多个字符

[]    匹配任意一个字符的出现      [!]表示不匹配其中字符

有个需要注意的问题啦:如果一个文件夹下有隐藏文件.hello.swp

ls -l .*swp 只能这样呀不能这样ls -l *swp这样不搜索隐藏文件? 

grep:

zlm@ubuntu:~$ grep -v ‘h.*o’ filename 显示filename中不包含匹配文本的所有行

sed:操作的只是一个拷贝

sed [-ni] ‘[n1[n2]]fuction’

sed参数解释:-n 表示只有经过sed特殊处理的那一行才被列出来,否则所有来自stdin的数据都会列出来

                        -i 直接修改读取文档的内容而不是由屏幕输出

                                   zlm@ubuntu:~$ sed -i '1,3d' filename (这样会直接对filename文件操作,而不是文件的拷贝了)

                        fuction a :add新增在新的一行(下一行)出现 cat -n filename | sed '1a hello'

                                    i : inter在新的一行(上一行)出现

                                    d: delete删除

                                    c:change取代cat -n filename | sed '1,3c hello'

                                    s:搭配正则表达式精确取代不想c一样整行取代

                                                    sed 's/old/new/g'

awk:sed尝尝用于一整行的处理而awk则是将一整个行分成数个字段来处理,每一行中每个字段从$1 $2..这么编号,而$0代表的是这一整行即这一行所有字段的和

awk '条件类型1 {fuction1} 条件类型2 {fuction2} ..' filename

NF 每一行有多少字段

NR 目前awk处理的第几行

FS 目前的分离字符,如果不设定默认是空格

zlm@ubuntu:~$cat /etc/passwd | awk 'BEGIN{FS=":"} $S3<10 {print $1 ”/t" $3}' 因为先将第一行字段读入$1 $2 ...之后才将FS=":"所以第一行的默认分隔还是空格,加上BEGIN就好了

diff:以行为单位比较两个文件

diff [-bBi] file1 file2 忽略空格、空行、大小写

diff -u file.old file.new > file.patch 

patch file.old < file.patch 这就是diff的黄金搭档patch

patch -R file.old < file.patch 还原了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值