「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」
1.只查看ett.txt文件(共100行)内第20到第30行的内容 创建模拟环境创建50行信息 seq 50 >/root/data/ett.txt
第一种方式:利用sed命令取行
[root@fu ~]# sed -n '20p' /root/data/ett.txt
20
[root@fu ~]# sed -n '20,30p' /root/data/ett.txt
20
21
22
23
24
25
26
27
28
29
30
第二种方法:利用awk命令取行
[root@fu ~]# awk 'NR==20' /root/data/ett.txt
20
[root@fu ~]# awk 'NR==20,NR==30' /root/data/ett.txt
20
21
22
23
24
25
26
27
28
29
30
第三种方法:利用grep命令
从开头取
[root@fu ~]# grep '20' /root/data/ett.txt
20
[root@fu ~]# grep -A10 '20' /root/data/ett.txt
20
21
22
23
24
25
26
27
28
29
30
从末尾取
[root@fu ~]# grep '30' /root/data/ett.txt
30
[root@fu ~]# grep -B10 '30' /root/data/ett.txt
20
21
22
23
24
25
26
27
28
29
30
从中间取
[root@fu ~]# grep '25' /root/data/ett.txt
25
[root@fu ~]# grep -C5 '25' /root/data/ett.txt
20
21
22
23
24
25
26
27
28
29
30
第四种方法:利用好head和tail命令
[root@fu ~]# head -30 /root/data/ett.txt|tail -11
20
21
22
23
24
25
26
27
28
29
30
问题: $()和``不能在head和tail里面用
[root@fu ~]# tail -11 $(head -30 /root/data/ett.txt|tail -11)
tail: option used in invalid context -- 1
[root@fu ~]# tail -11 `head -30 /root/data/ett.txt|tail -11`
tail: option used in invalid context -- 1
第五种方法:利用vim命令显示行号信息
在vim命令编辑模式显示行号信息
:set nu(number) 显示行号设置
:set nonu(no number) 取消行号显示设置
2.把/oldboy目录及其目录下所有以扩展名.sh结尾的文件中, 文件包含oldboy的字符串全部替换为oldgirl(后面讲) 创建模拟环境
mkdir -p /oldboy/test
cd /oldboy
echo "oldboy" >/oldboy/test/del.sh
echo "oldboy" >test.sh
echo "oldboy" >t.sh
touch oldboy.txt
touch alex.txt
解决问题:
第一步:找出相应以.sh结尾的文件
[root@fu oldboy]# find /oldboy/ -type f -name "*.sh"
/oldboy/t.sh
/oldboy/test.sh
/oldboy/test/del.sh
第二步:将找出的文件中oldboy信息修改替换为oldgirl
# sed 's#要替换的内容#替换成什么信息#g' /oldboy/test/del.sh
[root@fu oldboy]# sed 's#oldboy#oldgirl#g' /oldboy/test/del.sh (模拟的操作 文件并没有修改)
oldgirl
[root@fu oldboy]# cat /oldboy/test/del.sh
oldboy
[root@fu oldboy]# sed -i 's#oldboy#oldgirl#g' /oldboy/test/del.sh
[root@fu oldboy]# cat /oldboy/test/del.sh
oldgirl
补充:利用sed命令修改文件时,规范使用方法 01.在修改前,先模拟执行测试替换功能(不要直接加上-i参数) 02.在修改前,进行文件备份 sed -i.bak 's#oldgirl#oldboy#g' /oldboy/test/del.sh 说明:-i 参数后不要再接上任何其他参数信息,其他参数要写在-i参数之前
第三步,将第一步和第三步命令进行结合
第一种结合方式
find /oldboy/ -type f -name "*.sh"|xargs sed -i 's#oldboy#oldgirl#g' /oldboy/test/del.sh
[root@fu oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed -i 's#oldboy#oldgirl#g' /oldboy/test/del.sh
[root@fu oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat
oldgirl
oldgirl
oldgirl
[root@fu oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed -i 's#oldgirl#oldboy#g' /oldboy/test/del.sh
[root@fu oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat
oldboy
oldboy
oldboy
第二种结合方式
sed -i 's#oldboy#oldgirl#g' /oldboy/test/del.sh $(find /oldboy/ -type f -name "*.sh")
[root@fu oldboy]# sed -i 's#oldboy#oldgirl#g' /oldboy/test/del.sh $(find /oldboy/ -type f -name "*.sh")
[root@fu oldboy]# cat $(find /oldboy/ -type f -name "*.sh")
oldgirl
oldgirl
oldgirl
第三种结合方式
find /oldboy/ -type f -name "*.sh" -exec sed -i 's#oldgirl#oldboy#g' {} \;
[root@fu oldboy]# find /oldboy/ -type f -name "*.sh" -exec cat {} \;
oldboy
oldboy
oldboy