shell的笔记

获取本机ip地址 hostname -I | awk '{print $1}'  返回一条IP
ll |awk '{if(NR!=1) print $9}' NR==1 定位在file的第一行,print $9打印第9列
timeout 30s +命令 设置执行超时退出
命令后 + && \ 表示前一个执行后正常了后一个才会执行
>/dev/null 2>&1  把输出结果和报错都重定向到垃圾桶。>代表重定向 /dev/null 代表一个不存在的文件(黑洞),等同于删除 & 代表等同的意思,这里的2>&1 即代表错误输出的方式等同于标准输出,然标准输出被我们丢黑洞了,所以整句代码 >/dev/null 2>&1 的意思就是将前序命令或代码的输出全部丢黑洞,不显示任何执行结果,这中方式常用于shell脚本里屏蔽非重要结果或提示
type xremote type + 程序,输出程序路径,如果没有就未安装,可以用于检查是否有这个程序
which + python3 只用查找于可执行程序路径
输出时间 $(date +'%F %T')   2023-03-20 17:49:59
a=$(hostname) ==  a=`hostname`
shell往方法里面传参yellow_out "qweqweqwe"   yellow_out是方法   方法里面${1} 表示参数
sort:将文件进行排序并输出  sort -k 7rn   -k 指定需要排序的列位,7 第七列,-r 以相反的顺序来排序,-n 根据字符串的数字比较
——————————————————grep——————————————————
grep      拓展:grep得到的结果是一行 ,awk'{print $3}' 可以把列选出来,默认以空格为分隔
-c        只打印匹配的文本行的次数,不显示文本内容
-i        匹配时忽略字母大小写
-h        当搜索多个文件,不显示匹配文件名前缀
-l        只列出含义匹配的文本名,不显示其具体匹配的内容
-n        列出所有匹配的文本行,并显示行号
-s        不显示关于不存在或无法读取文件的错误信息
-v        只显示不匹配的文本行,反向选择,显示与搜索字符串不相符的行
-w        匹配整个单词
-x        匹配整个文本行
-r        递归搜索,不仅搜索当前目录,还有各级子目录
-E        开启扩展(extend)的正则表达式      eg: docker images |grep -vE  "8bc85d3aa518|735fd3c1b3ab"
——————————————————————————————————————————
grep -n 'sh[io]rt' test.txt  在[ ]中无论有几个字符,都仅代表一个字符,也就是说[ ]表示匹配“i”或者“o”
grep -n 'oo' test.txt 查找包含重复单个字符“oo”
若查找"oo"前面不是"w"的字符串,只需要通过集合字符的反向选择"[^]"来实现该目的 grep -n '[^w]oo' test.txt  但这样woood也是符合的因为可以解释成oo前面是o
grep '[^a-z]oo' test.txt  筛选出oo,但是小写字母加oo的不要。([^]字符的取反);大写字母则通过“A-Z”表示
grep '[0-9]' test.txt 查找包含数字的行
查找行首“^”与行尾字符"$"
基础正则表达式包含两个定位元字符:“^”(行首)与"$"(行尾)。如果想要查询以"the"字符串为行首的行,则可以通过"^"元字符来实现 grep '^the' test.txt
***************************************************
* 查询以小写字母开头的行可以通过"^a-z"规则来过滤    * 
* 查询大写字母开头的行则使用" ^A-Z"规则            *
* 若查询不以字母开头的行则使用" ^ [ ^a-zA-Z]"规则    *
***************************************************
 "^"符号在元字符集合[ ]符号内外的作用是不一样的
 结尾$
grep '\.$' test.txt 实现查询以小数点"."结尾的行,小数点"."在正则表达式中也是一个元字符,所以需要用转义字符"\"将具有特殊意义的字符转化成普通字符
当查询空白行时,执行"grep -n '^$' test.txt"即可
4、查找任意一个字符"."与重复字符"*",在正则表达式中小数点"."也是一个元字执行
   grep -n 'w..d' test.txt" 可以查找"w??d"的字符串
grep -n '[0-9][0-9]*' test.txt   查询任意数字所在行 
5、基础正则表达式中的限定范围的字符"{}"  因为”{}“在Shell中具有特殊意义,所以在使用”{}“字符时,需要利用转义字符”“,将”{}"字符转换成普通字符
grep -n 'o\{2\}' test.txt      查询两个o的字符  
grep -n 'wo\{2,5\}d' test.txt  查询以w开头以d结尾,中间包含2-5个o的字符
grep -n 'wo\{2,\}d' test.txt   查询以w开头以d结尾,中间报班两个或两个以上o的字符串
——————————————————————————————————————————
grep命令仅支持基础正则表达式,如果使用扩展正则表达式,需要使用egrep或awk命令。egrep命令与grep命令的用大基本相似。egrep命令是收缩文件获得模式,使用该命令可以搜索文件获得模式,使用该命令可以搜索文件中的任意字符串和符号,也可以收缩一个或多个文件的字符串,一个提示符一课时单个字符、一个字符串、一个字或一个句子。

扩展正则表达式常见元字符
+
    作用:重复一个或者一个以上的前一个字符
    示例:执行"egrep -n 'wo+d' test.txt"命令,即可查询"wood" "woood" "wooood"等字符串
 

    作用:零个或者一个的前一个字符 
    示例:执行"egrep -n 'bes?t' test.txt"命令,即可查询“bet”“best”这两个字符串
 

    作用:使用或者(or)的方式找出多个字符 
    示例:执行"egrep -n 'of|is|on' test.txt"命令即可查询"of"或者"if"或者"on"字符串    
 
() 
    作用:查找“组”字符串 
    示例:"egrep -n 't(a|e)st' test.txt"。"tast"与"test"因为这两个单词的"t"与"st"是重复的,所以将"a"与"e" 列于“()”符号当中,并以"|"分隔,即可查询"tast"或者"test"字符串
 
()+ 
    作用:辨别多个重复的组 
    示例:"egrep -n 'A(xyz)+C' test.txt"。该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思
—————————sed——————————————sed————————
sed 的替换功能     匹配正则加 -r 

sed  " s/ 替换前/ 替换后/ g "  test.txt (g是匹配到的全部替换,这种替换不会改变真实文件)
指定行号范围内进行的替换: sed  ‘ 行号范围  s/ 替换前 / 替换后 /g ’  eg:sed '1,10s/ANT1/ANT2/g' test.txt  替换第1行至第10行
正则表达务必加 –r  才生效: sed -r '1,10s/ro+/r/g' test.txt
([ ^: ] +):   非冒号的任意字符,这个字符可以重复一次或者以上
(.*):         这个过程中假如是  A:B:C:D  则匹配到的内容会是  A:B:C: ,即找到最后一个冒号前面,而忽略之前的所有冒号,这叫  .* 的贪婪匹配。
========= .:匹配任何字符串 ========== *:一次或多次 ==========?:不要太贪婪,在找到第一个匹配项后停止

正则表达式
字母加数字组合只取字母   
每个(    )括起来的算是一部分整体,可用 \1 , \2 , \3 ...依次代表,并可以在后续依次调用
echo hello123|sed "s/\([a-z]*\).*/\1/"    结果:  hello 。\1代表的是第一个匹配项hello。原理\([a-z]*\).*把hello123都筛选了出来,最后\1替换掉hello123   (  )需要加转义符,[ ]不用加

echo hello123|sed 's/\([a-z]*\)\([0-9]\{3\}\)/\2\1/'    结果:123hello   \2\1  第二项\([0-9]\{3\}\)放在第一项([a-z]*\)前面   sed最多可以记录9个模式  ==========\{3\}匹配三次,\{0,2\}匹配0到2次

当要替换的文件名中含有 / ,可能会造成歧义,这时需要脱义 \ / ,或者换特征分割符成 @ # 使用。
比如 /root/ 替换成 abc ,则为 sed -r " s/  \/root\/  /abc/g "  或  sed -r  ' s @ /root/ @ abc @ g '
head test.txt |sed 's/[a-zA-Z]//g'    通过 [ ] 的范围作用把所有的英文字母删除掉
把所有的行前面加上   aaa:         我写的head test.txt |sed 's/(.*)/(aaa)/\2\1'
正确的:head test.txt |sed 's/(.*)/aaa:&/g'    只有一个()的时候,后面引用它时可以直接用  & 
匹配前面的子表达式 1 次或多次(等价于{1, }),例如:zo+能匹配 "zo"以及 "zoo",但不能匹配 "z"
========================================shell--正则表达式中符号含义(完整版)================================
 ^        匹配行首,例如'^dog'匹配以字符串dog开头的行(注意:awk 指令中,'^'则是匹配字符串的开始)
 $        匹配行尾,例如:'^、dog$'匹配以字符串 dog 为结尾的行(注意:awk 指令中,'$'则是匹配字符串的结尾)
 ^$        匹配空行
 [ ]        匹配字符集合
 [^]        匹配中括号的字符以外的任意一个字符
 \        转义符,屏蔽一个元字符的特殊含义
 ()        匹配表达式,例如:不支持'(frog)'  frog是字符串不是表达式
 \(\)    匹配表达式,例如:不支持'(frog)'    
 ?        匹配前面的子表达式 0 次或 1 次(等价于{0,1}),例如:where(is)?能匹配"where" 以及"whereis"
 \?        匹配前面的子表达式 0 次或 1 次(等价于'\{0,1\}'),例如:'where\(is\)\? '能匹配 "where"以及"whereis"
 ?        当该字符紧跟在任何一个其他限制符(*, +, ?, {n},{n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个"o",而 'o+' 将匹配所有 'o'
 .        匹配除换行符('\n')之外的任意单个字符(注意:awk 指令中的句点能匹配换行符)
 *        匹配前面的子表达式 0 次或多次(等价于{0, }),例如:zo* 能匹配 "z"以及 "zoo"
 \+        匹配前面的子表达式 1 次或多次(等价于'\{1, \}'),例如:'where\(is\)\+ '能匹配 "whereis"以及"whereisis"
 +         匹配前面的子表达式 1 次或多次(等价于{1, }),例如:zo+能匹配 "zo"以及 "zoo",但不能匹配 "z"
 {n}        n 必须是一个 0 或者正整数,匹配子表达式 n 次,例如:zo{2}能匹配
 {n,}    "zooz",但不能匹配 "Bob"n 必须是一个 0 或者正整数,匹配子表达式大于等于 n次,例如:go{2,}
 {n,m}    能匹配 "good",但不能匹配 godm 和 n 均为非负整数,其中 n <= m,最少匹配 n 次且最多匹配 m 次 ,例如:o{1,3}将配"fooooood" 中的前三个 o(请注意在逗号和两个数之间不能有空格)
 x|y        匹配 x 或 y,例如: 不支持'z|(food)' 能匹配 "z" 或"food";'(z|f)ood' 则匹配"zood" 或 "food"
 [0-9]    匹配从 0 到 9 中的任意一个数字字符(注意:要写成递增)
 [xyz]    字符集合,匹配所包含的任意一个字符,例如:'[abc]'可以匹配"lay" 中的 'a'(注意:如果元字符,例如:. *等,它们被放在[ ]中,那么它们将变成一个普通字符)
 [^xyz]    负值字符集合,匹配未包含的任意一个字符(注意:不包括换行符),例如:'[^abc]' 可以匹配 "Lay" 中的'L'(注意:[^xyz]在awk 指令中则是匹配未包含的任意一个字符+换行符)
 [A-Za-z]    匹配大写字母或者小写字母中的任意一个字符(注意:要写成递增)
 [^A-Za-z]匹配除了大写与小写字母之外的任意一个字符(注意:写成递增)
 \d        匹配从 0 到 9 中的任意一个数字字符(等价于 [0-9])
 \D        匹配非数字字符(等价于 [^0-9])
 \S        匹配任何非空白字符(等价于[^\f\n\r\t\v])
 \s        匹配任何空白字符,包括空格、制表符、换页符等等(等价于[ \f\n\r\t\v])
 \W        匹配任何非单词字符 (等价于[^A-Za-z0-9_])
 \w        匹配包括下划线的任何单词字符(等价于[A-Za-z0-9_])
 \B        匹配非单词边界,例如:'er\B' 能匹配 "verb" 中的'er',但不能匹配"never" 中的'er'
 \b        匹配一个单词边界,也就是指单词和空格间的位置,例如: 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的'er'    eg :ter\b   匹配“ter”结尾的单词
 \t        匹配一个横向制表符(等价于 \x09和 \cI)
 \v        匹配一个垂直制表符(等价于 \x0b和 \cK)
 \n        匹配一个换行符(等价于 \x0a 和\cJ)
 \f        匹配一个换页符(等价于\x0c 和\cL)
 \r        匹配一个回车符(等价于 \x0d 和\cM)
 \\        匹配转义字符本身"\"
  \<        匹配单词,例如:'\<frog' (等价于'\bfrog'),匹配以 frog 开头的单词
 \>        匹配单词,例如:'frog\>'(等价于'frog\b '),匹配以 frog 结尾的单词
 \<x\>    匹配一个单词或者一个特定字符,例如:'\<frog\>'(等价于'\bfrog\b')、'\<G\>'
 \cx        匹配由 x 指明的控制字符,例如:\cM匹配一个Control-M 或回车符,x 的值必须为A-Z 或 a-z 之一,否则,将 c 视为一个原义的 'c' 字符
 \xn        匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长,例如:'\x41' 匹配 "A"。'\x041' 则等价于'\x04' & "1"。正则表达式中可以使用 ASCII 编码
 \num    匹配 num,其中 num是一个正整数。表示对所获取的匹配的引用
 [:alnum:]    匹配任何一个字母或数字([A-Za-z0-9]),例如:'[[:alnum:]] '
 [:alpha:]    匹配任何一个字母([A-Za-z]), 例如:' [[:alpha:]] '
 [:digit:]    匹配任何一个数字([0-9]),例如:'[[:digit:]]
 [:lower:]    匹配任何一个小写字母([a-z]), 例如:' [[:lower:]] '
 [:upper:]    匹配任何一个大写字母([A-Z])
 [:space:]    任何一个空白字符: 支持制表符、空格,例如:' [[:space:]] '
 [:blank:]    空格和制表符(横向和纵向),例如:'[[:blank:]]'ó'[\s\t\v]'
 [:graph:]    任何一个可以看得见的且可以打印的字符(注意:不包括空格和换行符等),例如:'[[:graph:]] '
 [:print:]    任何一个可以打印的字符(注意:不包括:[:cntrl:]、字符串结束符'\0'、EOF 文件结束符(-1), 但包括空格符号),例如:'[[:print:]] '
 [:cntrl:]    任何一个控制字符(ASCII 字符集中的前 32 个字符,即:用十进制表示为从 0 到31,例如:换行符、制表符等等),例如:' [[:cntrl:]]'
 [:punct:]    任何一个标点符号(不包括:[:alnum:]、[:cntrl:]、[:space:]这些字符集)
 [:xdigit:]    任何一个十六进制数(即:0-9,a-f,A-F)
===============================================================================================
————————————————————————————————chown与chmod————————————————————————————————————————————————————————————
chown 修改文件和文件夹的用户和用户组属性
1。要修改文件hh.c的所有者.修改为sakia的这个用户所有
chown sakia hh.c
这样就把hh.c的用户访问权限应用到sakia作为所有者

2。将目录 /tmp/sco 这个目录的所有者和组改为sakia和组net
chown -R sakia:net /tmp/sco

chmod用法
用来 修改某个目录或文件的访问权限
chmod 777 hh.c    把hh.c文件修改为可写可读可执行
chmod 777 *.*     目录下所有的文件属性为可写可读可执行
chmod 777 *       改某目录下所有的文件夹属性为可写可读可执行
chmod 777 *.htm   修改所有htm文件的属性
chmod -R 777 /tmp/sco  修改/tmp/sco下所有的文件和文件夹及其子文件夹属性为可写可读可执行
———————————————————————————————————————————

#!/bin/bash
# 日志检测脚本 test.sh

tail -f error.log | while read danger;  # read 当读取到danger
do echo "mail" >> error.log;            # 输出mail 到error.log文件
sleep 5;                                # 每隔5秒输出一次,一直循环
done
——————压缩和解压缩———————————————
解压命令
tar -xvf filename.tar
tar -zxvf filename.tar.gz
tar -zxvf filename.tgz
tar -jxvf filename.tar.bz2
tar -xZvf filename.tar.Z
unrar e filename.rar # 解压到当前目录
unrar x filename.rar /path/to/extract 
unzip filename.zip -d filepath
tar.xz文件解压:先xz -d xxx.tar.xz到tar,然后tar xvf xxx.tar
压缩命令
tar -zcvf filename.tar.gz filename
tar -zcvf filename.tgz filename
tar -jcvf filename.tar.bz2 filename
zip filename.zip filename
zip -r location.zip location
gzip -d filename.gz filename
rar -a filename.rar filename
———————————————————————————————————————————
> 和 >>
“ > ” ,我们常用的用法是用来记录 log 日志,它也有其他的用法,如:echo "hello world!" > hello.log 生成hello.log文件并写入hello world!
echo "hello world!" >> hello.log  将 hello world!写入到hello.log中,但是没有清空hello.log中原有的内容,而是追加到hello.log的末尾,这跟文件写入的 " a+ "一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值