马哥第二周作业
文件和文本
总结文件查找工具find,文本处理工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
文件查找工具
find 命令
find 路径(/,/root/) -name linu* #在/路径下,查找包含linux的文件
find / -name linux*
-type (d,f,_,)指定文件类型
-size 20GB (文件+大于, -小于)
-mtime -7(7天内修改改的过的文件) +30超过30天修改过的文件.
#多条件组合查询,
find / -name *sh -type f -size -1GB
#复制匹配到的文件到目标目录
find /path/to/directory -name "*.log" -exec cp {} /path/to/destination \;
#删除匹配到到文件
find / -name "*.bak" -delete
文本格式化 printf的常见用法
printf命令
printf [-v var] format [arguments]# 1)将字符串输出到变量,而不是打印至终端.
var=$(printf "this is the printf command result"),# 这用法变量赋值有本质区别var1="result"
选项: -v 指定存储结果的变量
printf -v var "hello,world!"
#格式化参数并输出
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
%-s %f %c %d 都是格式替代符,%s输出一个字符串,%c表示输出一个字符,%f表示输出实数,%d输出整形,-表示左对齐,.2表示保留两位小数.
# 选项中使用单引号和双引号,等效
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 与 printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
如果没有参数,那么%s用null代替,%d用0代替
printf "a中<%b>c" "b"
printf的转义
\a 警告字符,\b后退,\c抑制,\f换页,\r回车,\t水平制表符,\v垂直制表符,\\反斜杠
文本查看工具 cat less more tail
cat 选项 文件名称
-n 对输出编号
-b 空白好不编号
-s 压缩空白行
less 参数 文件
-b设置缓冲区大小
-e 文件显示结束时,退出
-f 强行打开
-g 至标记最后搜索的关键字
-i 忽略大小写
-s 压缩空白行
b向上翻一页,d后翻半页,q退出,空格 滚动一页
tail 选项 文件名
-n k 输出最后k行
-c k 输出最后k字节
-f 输出增量数据,用于跟踪文件编号
wc 命令
wc 选项 文件
-c 统计字节数
-l 行数
-w 字数
-L 最长行的长度
find . * | xargs wc -l # 当前目录以及子目录的所有文件行数及总计行数。
wc -l * #统计当前目录下的所有文件行数及总计行数
tr命令
选项 参数 字符集1 字符集2
不接参数选项,就是转换
-c 取代所有不属于第一个字符集的字符
-d 删除所有属于第一个字符集的字符
-s 连续字符压缩为一个
-t 先删除第一个字符较第二个字符多出的字符
1)大写转换为小写
echo "HELLO WORLD" | tr 'A-Z' 'a-z'
echo txt |tr '\t' '' #将制表符转换为空格
二 文本三剑客之sed
sed命令,本质上是一个预先定义好处理规则的,进行流编辑的行处理文本工具.
他有几个特性,1)一次只读取并处理一行.2)根据规则匹配并使用命令修改数据.并将结果存入缓冲区,不对源文件直接修改.3)并将结果输出,并重复执行.
命令基本格式
sed 选项[-ihnV] 脚本[-e<script>] [-f<script文件>] 文件[文本文件]
-e 可以指定多个编辑操作
-f #指定脚本或者规则.
-i # 将执行结果直接写入源文件,慎用
sed s脚本命令(上述的第三项)
#命令基本格式
[address]s/pattern/replacement/flags #address表示指定要操作的具体行,pattern指的是需要替换的内容,replace指的是要替换的新内容.
flags标记
| flags标记 | 功能 | 举例 |
|---|---|---|
| n | 1~512之间的数字,表示指定要替换的字符串出现第几次时替换,如替换掉第2个A | |
| g | 全局,即匹配到的所有内容替换,没有g就替换第一次, | |
| p | 打印与替换命令中指定的模式匹配的行,通常与-n一起使用 | sed -n 's/test/trial/p' data5.txt. -n 选项会禁止 sed 输出,但 p 标记会输出修改过的行,将二者匹配使用的效果就是只输出被替换命令修改过的行 |
| w file | 将缓冲区的内容写入到file文件中 | |
| & | 用正则表达式匹配的内容进行替换 | |
| \n | 匹配第n个子串,改子串之前在pattern中用()指定 | |
| \ | 转义(转义替换部分包含:& \等) |
sed d替换脚本命令
基本格式 [address]d
1) sed 'd file.txt #它会删除指定行中的所有内容,会清空文件.
2) sed '2,3d' file.txt #删除文件中的第2,3行
3) sed '/1/,/3/d' file.txt #删除第一行,到第3行的数据
sed a 和 i 脚本命令
a命令,表示在指定行后面附加一行,i表示从前面插入一行,格式基本一致.
格式[address]a(或i)\新文本内容
sed '3i\this the inserted line' file.txt #第三行前插入
sed '3a\this the inserted line' file.txt #第三行后面插入
sed c 替换脚本命令
c 命令表示将指定行中的所有内容替换成改选项后面的字符串,其基本格式为
[address]c\n
sed '3c\替换内容' file.txt
sed '/number 3/c\this is a change line' file.txt
sed y 转换脚本命令
转换命令是唯一处理单个字符的sed脚本命令,基本格式如下
[address]y/inchars/outchars/
sed q 脚本命令
sed '2q' test.txt 处理到第二行后,就退出
sed '/number 1/{ s/number 1/number 0/;q; }' test.txt # 匹配number1时,替换成number 0,然后直接退出.
sed脚本命令的寻址方式(匹配行)
sed命令默认匹配所有行,如果将脚本(命令规则)作用于指定行,写明address部分.有两种形式,1.数字指定行区间,2文本模式指定具体行区间.
数字模式指定行区间
sed '2s/dog/tom/' file.txt #将第2行中的dog替换为tom.
sed '2,$s/dog/tom/' file.txt # 从第2行开始,$后面所有行,$表示末尾.
文本模式指定行区间
/pattern/command
sed '/demo/s/bash/tcsh/' file.txt #匹配到demo行的,将bash替换为tcsh
可以将匹配模式写入一个script文件,在匹配模式中引入脚本,实现变更
# 源文本内容
<body>
h1Helloh1
h2Helloh2
h3Helloh3
</body>
# 编写匹配及操作规则脚本
~]# cat sed.sh
/h[0-9]/{
s//<&>/1
s//\<\/&\>/2
}
# 执行编辑操作
~]# sed -f sed.sh test.txt
<h1>Hello</h1>
<h2>Hello</h2>
<h3>Hello</h3>
sed 脚本命令的总结
a\ # 在当前行下面插入文本。
i\ # 在当前行上面插入文本。
c\ # 把选定的行改为新的文本。
d # 删除,删除选择的行。
D # 删除模板块的第一行。
s # 替换指定字符
h # 拷贝模板块的内容到内存中的缓冲区。
H # 追加模板块的内容到内存中的缓冲区。
g # 获得内存缓冲区的内容,并替代当前模板块中的文本。
G # 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
l # 列表不能打印字符的清单。
n # 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
N # 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
p # 打印模板块的行。
P # (大写) 打印模板块的第一行。
q # 退出Sed。
b lable # 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
r file # 从file中读行。
t label # if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
T label # 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
w file # 写并追加模板块到file末尾。
W file # 写并追加模板块的第一行到file末尾。
! # 表示后面的命令对所有没有被选定的行发生作用。
= # 打印当前行号码。
# # 把注释扩展到下一个换行符以前。
文本三剑客之grep
基本命令格式: grep 选项 模式 文件名称
grep "pattern" file.txt file2.txt
#其中pattern表示模式匹配,正则表达式.
#选项
-c 列出包含模式的行数,统计有多少行
-i 忽略大小写
-l 列出带有匹配行的文件名
-n 每一行的前面列出行号
-v 列出没有匹配模式的行
-w 把表达式当做完整单字符串,忽略部分匹配的行
1)通配符
c* 匹配0个(空白)或者多个c字符,c表示任意字符
. 任何一个字符
[xyz] 匹配其中一个字符
[^xyz] 匹配除了方括号中的以外的所有字符
^ 锁定行开头
$ 锁定行结尾
2)正则中
+ - * / { ( ) 都需要转义才能正常使用
文本编辑工具vim
分几种模式,命令行模式,最后行模式(扩展的命令行),编辑模式
i 光标所在处插入
o 开起新行,行首插入
方向键可以上下移动贯标
home/end +ctl 可以移动文章最末尾,最首
pageup /pagedown 上下翻页
# 移动光标至需要复制的位置,按压v,按下y来复制,移动光标至要粘贴的位置,p复制.
文本处理之****单行重定向(追加)
输入和输出重定向,分别用< >来表示,0标准输入,1标准输出,2标准错误信息输出
echo "hello" > a.txt
echo hello >> a.txt #将hello字符串追加至a.txt文件中.
echo hello 2>&1 将错误信息重定向到标准输出.
ll >/dev/null 2>&1
1> > 等效,输出重定向
2> 错误重定向,报警,提示
&> 所有包括1 2
合并重定向
() {} #例如: (date;ll;)
~]# ls /data/ /err 2> /data/all 1>&2
多行文本重定向(多行追加)
cat >>date <<EOF
123
12
11
10
09
08
07
EOF
tee命令
#将多行文本输入进date.sh文件中,并在屏幕中打印
cat <<EOF |tee date.sh
123
231
321
112
132
修改别人的密码(静默更改)
cat pass.txt | passwd --stdin root &> /dev/null
总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
变量的命名规则(或者规范): 可以包含大小写字母,数字,下划线,不能包含其他特殊字符.变量名称大小写敏感.要避免使用shell保留字,if else,then, for, fi ,while,空格,特殊字符.
# 变量的定义和赋值
var=123; 注意不能留空格写成 var = 123,这个变成var 和 123比对了.不是变量赋值.
# 隐式赋值
for file in $(ls /root) 每循环一次,向file赋值一次.
#变量的使用
echo $file
echo ${your_name} ,此花括号,不是必选项,主要用于帮助解释器识别变量边界.
变量类型
字符串类型
str=1223
str='1233'
str="1233"
整数变量
integer=123
declare -i integer=123 使用的是typeset或者declare命令,可以指明变量类型
数组变量
arr=(1 2 3 4 5)
arr[0]="1"
arr[2]="3"
关联数组(下标是特定有意义的字符)不是数字
arr[age]=12
#环境变量
echo $PATH
特殊变量
$0 表示脚本名称
$1 脚本参数 $2 脚本参数
$# 表示传递给脚本的参数数量
$? 上一条命令的退出状态
-
通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
鸡兔同笼问题 采取一个for循环 #设i=1,鸡的数量 #!/bin/bash i=1 while [ $i -lt 30 ] do result=$((i*2 + (30-i)*4)) if [ $result -ne 80 ] ;then let i++ else echo '鸡:'$i "兔子": $((30-$i)) break fi done -
结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。for ((i=1;i<=100;i++)); do echo $i [ id $i ] && echo "user" $i "already cunzai" || useradd $i done -
磁盘存储术语总结: head, track, sector, sylinder.
head : 机械硬盘的扫描头 track : 磁盘上的圆形环 sector : 磁盘存储的最小单位,是对磁道的分组,扇区通常固定 分区: 就是扇区的集合 sylinder : 多个盘面相同位置的磁道组成的垂直堆叠. block: 文件系统的最小单位块 pe: lvm逻辑卷的基本单位 -
总结MBR,GPT结构。
# 他们都是磁盘分区方案: MBR第一扇区总512字节,446mbr用于引导相关,64字节dpt分区表.2^32即2T. GPT分区: 亦GUId分区表, -
总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff
lsblk #列出磁盘的块设备信息, -a所有设备,-f显示文件系统信息
blkid #块设备上所有文件系统查询.
fdisk -l #分区信息查看
df -Tha #查看已经挂载文件系统的使用情况.
fdisk命令与parted命令分区.前mbr,后用于gpt分区.
# 创建文件系统
mkfs
~]$ mkfs.ext4 /dev/sda1
mkfs.ntfs /dev/sda1
tune2fs命令是用于调整和修改ext2、ext3和ext4文件系统的参数和属性的命令行工具。它可以用于更改文件系统的相关设置,例如调整文件系统的挂载选项、更改文件系统的标签、设置文件系统检查间隔等。
xfs_info /dev/sda1 #查询xfs文件系统
# fsck
用于检查和修复文件系统错误的命令行工具。它可以扫描文件系统并查找任何损坏的文件、目录或其他数据,并尝试修复这些错误。
挂载/卸载,启用swap/禁用swap
文本三剑客之awk 本节可以做一个专题,结合正则表达
略;**正则表达式**
2. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。

浙公网安备 33010602011771号