linux 基础进阶
文件的取行
创建测试环境
[root@oldboyedu-39 ~]# cd /data/
[root@oldboyedu-39 data]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@oldboyedu-39 data]# seq 100 >/data/ett.txt
[root@oldboyedu-39 data]# tail ett.txt
91
92
93
94
95
96
97
98
99
100
取一个文件的20-30行
[root@oldboyedu-39 data]# #方法1-head -tail
[root@oldboyedu-39 data]# head -30 ett.txt|tail -11
20
21
22
23
24
25
26
27
28
29
30
#方法2
[root@oldboyedu-39 data]# #第二种方法-sed
[root@oldboyedu-39 data]# #p --- print显示
[root@oldboyedu-39 data]# #-n 取消默认输出
[root@oldboyedu-39 data]# sed -n '20,30p' ett.txt
20
21
22
23
24
25
26
27
28
29
30
#方法3
[root@oldboyedu-39 data]# #方法3 -awk
[root@oldboyedu-39 data]# #awk '从第20行开始到第30行结束' /data/ett.txt
[root@oldboyedu-39 data]# awk 'NR==20' ett.txt
20
[root@oldboyedu-39 data]# #NR-----行号
[root@oldboyedu-39 data]# awk 'NR==20,NR==30' ett.txt
20
21
22
23
24
25
26
27
28
29
30
别名
#创建测试环境:
[root@oldboyedu-39 tmp]# touch /tmp/test.txt /mnt/test.txt
[root@oldboyedu-39 tmp]# ls -l /tmp/test.txt /mnt/test.txt
-rw-r--r--. 1 root root 0 Jul 16 15:54 /mnt/test.txt
-rw-r--r--. 1 root root 0 Jul 16 15:54 /tmp/test.txt
#方法一
[root@oldboyedu-39 tmp]# cp /mnt/test.txt /tmp/
cp: overwrite `/tmp/test.txt'?
[root@oldboyedu-39 tmp]# \cp /mnt/test.txt /tmp/
#方法二
[root@oldboyedu-39 tmp]# #使用命令的绝对路径
[root@oldboyedu-39 tmp]# cp /mnt/test.txt /tmp/
cp: overwrite `/tmp/test.txt'? ^C
[root@oldboyedu-39 tmp]# #使用命令的绝对路径 --- 命令存放的位置
[root@oldboyedu-39 tmp]# which cp
alias cp='cp -i'
/bin/cp
[root@oldboyedu-39 tmp]# which mkdir
/bin/mkdir
[root@oldboyedu-39 tmp]# /bin/cp /mnt/test.txt /tmp/
#别名查看
[root@oldboyedu-39 tmp]# #查看系统里面的别名
[root@oldboyedu-39 tmp]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@oldboyedu-39 tmp]# #alias cp='cp -i'
[root@oldboyedu-39 tmp]# #linux下面使用cp命令的时候 就相当于运行了cp -i
- 配置别名
[root@oldboyedu-39 tmp]# #运行rm命令的时候 系统提示 do not user rm
[root@oldboyedu-39 tmp]# #第一个里程碑-如何让系统 do not user rm
[root@oldboyedu-39 tmp]# echo "do not user rm"
do not user rm
[root@oldboyedu-39 tmp]# #第二个里程碑-配置别名
[root@oldboyedu-39 tmp]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@oldboyedu-39 tmp]# #alias cp='cp -i'
[root@oldboyedu-39 tmp]# alias rm='echo do not user rm'
[root@oldboyedu-39 tmp]# #第三个里程碑-检查
[root@oldboyedu-39 tmp]# al
alias alsa-delay alsa-info.sh alsamixer alternatives
alsactl alsa-info alsaloop alsaunmute
[root@oldboyedu-39 tmp]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='echo do not user rm'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@oldboyedu-39 tmp]# rm /etc/host
do not user rm /etc/host
[root@oldboyedu-39 tmp]# rm -f /etc/host
do not user rm -f /etc/host
[root@oldboyedu-39 tmp]# \rm /tmp/test.txt
[root@oldboyedu-39 tmp]# #第四个里程碑-如何让我们配置的别名 永久生效
[root@oldboyedu-39 tmp]# ls -l /etc/profile
-rw-r--r--. 1 root root 1841 Mar 22 2017 /etc/profile
[root@oldboyedu-39 tmp]# echo "alias rm='echo do not user rm'" /etc/profile
alias rm='echo do not user rm' /etc/profile
[root@oldboyedu-39 tmp]# echo "alias rm='echo do not user rm'" >> /etc/profile
[root@oldboyedu-39 tmp]# tail -1 /etc/profile
alias rm='echo do not user rm'
[root@oldboyedu-39 tmp]# #第五个里程碑 ---配置生效
[root@oldboyedu-39 tmp]# source /etc/profile
注意事项**
1.上述配置当前命令行生效,关闭远程连接或者是重新打开就会失效
[root@oldboyedu-39 tmp]# #如果永久生效,需要修改/root/.bahsrc
[root@oldboyedu-39 tmp]# vim /root/.bashrc
小节
#别名的作用
#1.系统里面比较危险的命令加上别名 防止操作失误 rm cp mv
#2.简化命令
命令组合使用
[root@oldboyedu-39 data]# mkdir -p /oldboy/test
[root@oldboyedu-39 data]# cd /oldboy/
[root@oldboyedu-39 oldboy]# echo "oldboy" > test/del.sh
[root@oldboyedu-39 oldboy]# echo "oldboy" > test.sh
[root@oldboyedu-39 oldboy]# echo "oldboy" > t.sh
[root@oldboyedu-39 oldboy]# touch oldboy.txt
[root@oldboyedu-39 oldboy]# touch alex.txt
[root@oldboyedu-39 oldboy]# find
.
./alex.txt
./oldboy.txt
./test.sh
./t.sh
./test
./test/del.sh
[root@oldboyedu-39 oldboy]# #如何找出要处理的文件
[root@oldboyedu-39 oldboy]# find /oldboy/ -type f
/oldboy/alex.txt
/oldboy/oldboy.txt
/oldboy/test.sh
/oldboy/t.sh
/oldboy/test/del.sh
[root@oldboyedu-39 oldboy]# find /oldboy/ -type f -name "*.sh"
/oldboy/test.sh
/oldboy/t.sh
/oldboy/test/del.sh
#修改文件内容
[root@oldboyedu-39 oldboy]# #试着修改一个文件的内容oldboy------->oldgirl
[root@oldboyedu-39 oldboy]# ll test.sh
-rw-r--r--. 1 root root 7 Jul 16 17:24 test.sh
[root@oldboyedu-39 oldboy]# cat test
cat: test: Is a directory
[root@oldboyedu-39 oldboy]# cat test.sh
oldboy
[root@oldboyedu-39 oldboy]# #sed 's#找谁#替换成什么#g'
[root@oldboyedu-39 oldboy]# sed 's#oldboy#oldgirl#g' test.sh
oldgirl
[root@oldboyedu-39 oldboy]# cat test.sh
oldboy
[root@oldboyedu-39 oldboy]# sed -i 's#oldboy#oldgirl#g' test.sh
[root@oldboyedu-39 oldboy]# cat test.sh
oldgirl
#find命令+sed配合使用
[root@oldboyedu-39 oldboy]# find /oldboy/ -type f -name "*.sh"
/oldboy/test.sh
/oldboy/t.sh
/oldboy/test/del.sh
[root@oldboyedu-39 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g'
oldgirl
oldgirl
oldgirl
[root@oldboyedu-39 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed -i 's#oldboy#oldgirl#g'
[root@oldboyedu-39 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat
oldgirl
oldgirl
oldgirl
[root@oldboyedu-39 oldboy]# #方法2
[root@oldboyedu-39 oldboy]# #第一个里程碑
[root@oldboyedu-39 oldboy]# which mkdir
/bin/mkdir
[root@oldboyedu-39 oldboy]# ls -l /bin/mkdir
-rwxr-xr-x. 1 root root 50088 Jun 19 2018 /bin/mkdir
[root@oldboyedu-39 oldboy]# #ls -l 这里放置的是/bin/mkdir
[root@oldboyedu-39 oldboy]# #ls -l /bin/mkdir 是which mkdir的结果
[root@oldboyedu-39 oldboy]# #ls -l 此处放着which mkdir命令的结果
[root@oldboyedu-39 oldboy]# #ls -l $(which mkdir)
[root@oldboyedu-39 oldboy]# #$() 先运行里面的命令 把结果\输出\留下来
[root@oldboyedu-39 oldboy]# #第二个里程碑-find命令找出你要处理的文件
[root@oldboyedu-39 oldboy]# find /oldboy/ -type f -name "*.sh"
/oldboy/test.sh
/oldboy/t.sh
/oldboy/test/del.sh
[root@oldboyedu-39 oldboy]# #第三个里程碑-让sed命令处理find命令找到的文件
[root@oldboyedu-39 oldboy]# sed 's#oldboy#oldgirl#g' /oldboy/t.sh /oldboy/test.sh /oldboy/test/del.sh
oldgirl
oldgirl
oldgirl
[root@oldboyedu-39 oldboy]# #sed 's#oldboy#oldgirl#g' 这些文件是find命令的结果
[root@oldboyedu-39 oldboy]# #sed 's#oldboy#oldgirl#g' $(find /oldboy/ -type f -name "*.sh")
[root@oldboyedu-39 oldboy]# sed 's#oldboy#oldgirl#g' $(find /oldboy/ -type f -name "*.sh")
oldgirl
oldgirl
oldgirl
[root@oldboyedu-39 oldboy]# #sed -i 必须加上文件名字 否则报错
[root@oldboyedu-39 oldboy]# #find /oldboy/ -type f -name "*.sh"|sed -i 's#oldgirl#oldboy#g'
[root@oldboyedu-39 oldboy]# #|传递的是 普通的文本 本字符号 所以 find |sed -i 可能会报错
[root@oldboyedu-39 oldboy]# #1.报错sed: no input files
[root@oldboyedu-39 oldboy]# #|传递的就是 文本 或文字符合
[root@oldboyedu-39 oldboy]# #2.没有报错 |本身
[root@oldboyedu-39 oldboy]# #开始测试
[root@oldboyedu-39 oldboy]# find /oldboy/ -type f -name "*.sh"|sed -i 's#oldgirl#oldboy#g'
sed: no input files
[root@oldboyedu-39 oldboy]# #|xargs
[root@oldboyedu-39 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed -i 's#oldgirl#oldboy#g'
小节
find 与其他命令配合
1.find + |xargs sed ""
2.sed + $()
总结


浙公网安备 33010602011771号