day04

  陈鑫


vim  文本编辑器 (在linux系统)  vi(纯命令,没有图形界面)    nano也是种编辑器

 GNU nano 2.9.8    New Buffer     Modified  

`6'a6'a6'




^G Get Help^O Write Ou^W Where Is^K Cut Text
^X Exit    ^R Read Fil^\ Replace ^U Uncut Tex

补:在windows系统中 文本编辑器:test , word等等

vim    文件名   (对文件进行编辑)

vim(更方便)  和  vi  比较

[root@localhost /]# vi  /etc/passwd

gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:975:975::/run/gnome-ini





[root@localhost /]# vim   /etc/passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin



(字符有光亮标记)

判断vim 打开的模式

根据vim 打开终端的最后一行:

如果打开后最后一行没有任何提示:

                          1,0-1         All

                                                 则是:命令模式

如果打开最后一行是:

<ile" [New File]           0,0-1         All

                                                 也是:命令模式 (New  File  代表是一个新文件)

如果打开最后一行是:

-- INSERT --               0,1           All

                                               则它是:插入模式(也就是编辑模式,可以对文件做一个正常的编辑)

如果打开最后一行是:

:                

                                               则它是:末行模式

(如果编写了内容  按q是退出不了的  只能按q!强制退出 或 wq保存退出


三种模式的关系及其切换:

 插入模式和末行模式的转换都是以命令模式为中间值(按esa键退出插入 、末行模式,到命令模式上)

命令模式按键到插入模式  ,按 键到末行模式


三种模式相关指令的介绍:

命令模式:

d+回车(enter)  删除光标所在行以及光标下一行

dd   删除光标所在行

Ndd      eg:3dd   删除光标行开始一共三行      行内容

x      或者     d+  空格     删除光标所在字符

D  伤处光标所在字符及下一个字符

dG  删除光标所在行到文档尾

dgg  删除光标所在行到文档首

s     字符替换,  替换光标所在字符   随后按esa键从插入模式回到命令模式(事实上就是先删除该字符,并且切换到插入模式,再输入要替换的字符)

yy    复制光标所在行   4yy   (从光标开始)

p   粘贴在光标所在的下一行

cc    剪切光标所在行

G    跳转到文档尾的行首

gg   跳转到文档首的行首

^     跳转到该行的行首

$     跳转到 该行的行尾

u   向左撤销

ctrl(键)   -r  向右撤销

提示:光标:该模式下亮的地方(一个字符 绿光)

                     通过上下左右移动

命令模式进入插入模式   :

(以下命令是在命令模式下执行的)

a  插入到光标后

A    插入到行尾

i    插入到光标前

o    插入到下一行

O    插入到上一行

s     删除光标字符进行插入模式

S      删除光标行进行插入模式

末行模式   :

:wq保存退出

:q  退出

:q!  强制退出

:wq! 强制保存退出

:15   跳转到指定行

:set  nu建立显示行数

:set  nonu取消显示行数

/root   匹配root关键字

:noh  取消光亮

 3,5dd     从光标行开始算删除3~5(3+5=8)

:1,5 co   10       (co复制的意思) 把1~5行的内容输入到第十行之下

:% s/root/000/   关键字符替换,替换的是每一行中第一次匹配的root关键字

:% s/root/000/g   关键字符替换,替换的是每一行中所有匹配的root关键字

:% s/.*#.*/  /g     关键字符替换,  替换的是每一行中所有匹配的#前后的所有字符,替换成空格

:% s  全文匹配

.*任意字符任意字  (=查找文档中包含#号字符的行,将整行删除

正则符: . 任意单个字符               (适用范围:数据内容

                *匹配前一个字符任意次

通配符:   *任意长度的任意字符   (适用范围:文件名

                 ?匹配任意单个字符

:r   FILENAME   把指定文件内容读取当当前文件光标的下一行

习题     

注:vim这个编辑器除了可以编辑文件之外,还可以创建文件

:.! 加上命令     就可以匹配到当前终端的命令执行结果

①如何再问编辑的文件中显示时间:

末行模式输入:  .!date

Mon Nov 28 13:52:44 CST 2022
~                                            
~                                            
~                                            
~                                            
~                                            
~                                            
~                                            
:.!date                    1,1           All

②如何把一个文件内容引入到当前正在编辑的文件:

末行模式输入:  .!cat      +目录下文件名

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
:.!cat  /etc/pass          1,1           Top

注:读取后,刚刚执行的  date  命令就不见了

若在执行②之后,再输入  .!date   date信息 就会代替光标所在行 

Mon Nov 28 14:07:34 CST 2022
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
Mon Nov 28 14:08:04 CST 2022
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
:.!date                    4,1           Top

③如何把一个文件内容读取到当前正在编辑的文件:

不会覆盖光标所在行)(只会读取到光标所在行的下一行

末行模式输入:r        +  目录下的文件名

Mon Nov 28 14:13:43 CST 2022
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
:r   /boot/grub2/grub.cfg                        4,1           Top

④查找文档中包含#号字符的行,将整行删除

Mon Nov 28 14:13:43 CST 2022
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub




Mon Nov 28 14:13:43 CST 2022







                           4,1           Top

⑤如何开启VI 的行号提示功能

 49 function load_video {
 50   if [ x$feature_all_video_module = xy ];     then
 51     insmod all_video
 52   else
 53     insmod efi_gop
 54     insmod efi_uga
 55     insmod ieee1275_fb
:set  nu                   51,1          23%

如何关闭VI 的行号提示功能:

:set  nonu   

⑥将光标移动到12行,并在第12行后面产生一个新的空白行第12行

法一:

:12

在命令模式下按o键:   在命令模式进入插入模式  , 插入到下一行并产生空白行

法二:

将光标移动到第12行最后一个字符,按a键进入插入模式,再按回车键

12 if [ -f ${config_directory}/grubenv ]; th    en
13 

⑦复制第一行日期内容到文章末尾

法一:

:1
命令模式下  yy复制该行     G跳转到文档尾的行首   p粘贴到下一行

法二:

:需要复制的行数   co    复制到哪一行的下一行
213   source $prefix/custom.cfg;
214 fi
215 
216 Mon Nov 28 14:13:43 CST 2022
~                                            
~                                            
~                                            
~                                            
                           216,1         Bot
:1   co  216

⑧将文档保存,将文档再次另存为/boot/newfile2,退出vi编辑器

:w     /boot/newfile2
:q!

文本内容处理命令 

echo打印命令  (忽略文件的输出类型)  (标准输入输出的命令)

[root@localhost ~]# echo  helloword
helloword
[root@localhost ~]# echo  $SHELL             (SHELL)命令解释器
/bin/bash
[root@localhost ~]#  echo  $HOSTNAME
localhost.localdomain
[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# A=0                     (给a变量赋值)
[root@localhost ~]# echo  $A  
 0            
[root@localhost ~]# echo  $HOSTNAME           $ 引用变量
localhost.localdomain

[root@localhost ~]# echo  "$HOSTNAME"          “ ”弱引用符(可以解释特殊含义的字符)
localhost.localdomain

[root@localhost ~]# echo   '$HOSTNAME'         ' '强引用符  (解释不了特殊含义)
 $HOSTNAME

[root@localhost ~]#  echo  当前主机时间date
当前主机时间date
[root@localhost ~]# echo  当前主机时间`date`       `  `命令替换符   (将引号中的内容作为命令)
当前主机时间Sat Nov 26 20:35:27 CST 2022
[root@localhost ~]# echo  当前主机时间$(date)     $( )命令替换符    (将括号中的内容作为命令) 
当前主机时间Sat Nov 26 20:37:09 CST 2022

linux 中文件的描述符   0标准输入(开始写入时, 没有命令)   1标准输出(正确命令输出到文件中)  2错误命令输出(到桌面,终端见图解

>  输出重定符 (覆盖)(将程序的内容输出重定到指定文件统一将内容写入文件,会覆盖源文件内容)                                     前提

   1标准输出(正确命令输出到文件中)

eg:

[root@localhost ~]# echo  1234 >file111
[root@localhost ~]# echo  1234 1>file111
[root@localhost ~]# cat  file111
1234
[root@localhost ~]# echo  abcd  >file111
[root@localhost ~]# cat  file111
abcd                                      (对源文件进行覆盖)


[root@localhost ~]# head  -5  /etc/passwd >f1
[root@localhost ~]# cat  f1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]# ll / >file
[root@localhost ~]# cat file
total 32
drwxr-xr-x.   2 root root    6 Nov 26 18:09 1
drwxr-xr-x.   3 root root   17 Nov 26 07:19 19
drwxr-xr-x.   3 root root   17 Nov 26 07:19 71
drwxr-xr-x.   3 root root   15 Nov 25 23:26 a
-rw-r--r--.   1 root root    0 Nov 23 23:08 aaa
lrwxrwxrwx.   1 root root    3 Nov 23 23:10 aaa.lnk -> aaa
lrwxrwxrwx.   1 root root    3 Nov 22 04:56 aaalnk -> aaa
lrwxrwxrwx.   1 root root    7 Jun 21  2021 bin -> usr/bin

2错误命令输出(到桌面,终端

eg:

[root@localhost ~]# haha
bash: haha: command not found...
[root@localhost ~]# haha  2>file
[root@localhost ~]# cat   file
bash: haha: command not found...

>> 输出重定向符(追加)   (不覆盖源文件

[root@localhost ~]# cat  file111
abcd
[root@localhost ~]# echo    1111111  >>file111
[root@localhost ~]# cat  file111
abcd
1111111

<  输入重定向符

[root@localhost ~]# cat  f1        
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@localhost ~]# cat  <f1                  (可省略描述符)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@localhost ~]# cat  0<f1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

、[root@localhost ~]# cat  0<  f1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

<< 终止结束符

[root@localhost ~]# cat


123
123


11111
11111


^C
[root@localhost ~]# cat  << .     (<<  加上终止结束字符(随便写)  )
> abc
> 123
> .

abc
123

[root@localhost ~]# cat << .   > file222   
> 11111  22222
> .                         (这样就不输入终端桌面上, 而是输入到文件file222)                   
[root@localhost ~]# cat  file222
11111  22222


#head  /etc/passwd    >  file

#tail  -2 /etc/passwd   >>file

#cmd    2> file1      把cmd的错误结果输入到file1文件

#cmd   &>file1    &表示1和2   把cmd正确或者错误输出写入到file1文件  ==  cmd 1>file1 2>&1  (&1   =  与正确输出结果一样)


l   管道符(无名管道)前一个命令的输出结果按照字符流的形式通过管道符连接后一个命令进行处理

(只有横向输出)  横向输出将前一个命令的标准输出作为后面文件的标准输入

eg:

对一个文件第十行显示:

错误形式:
[root@localhost ~]# cd  /
[root@localhost /]# head  /etc/passwd  |tail  -1 /etc/passwd
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash

正确示范:

[root@localhost /]# head  /etc/passwd  | tail  -1
operator:x:11:0:operator:/root:/sbin/nologin




                   (显示文件的前十行)  | (显示文件的最后一行)  ==  显示文件的前十行的最后一行

|tee  T型管道  横向输出将前一个命令的标准输出作为后面文件的标准输入         纵向输出将前一个命令的标准输出直接在终端打印显示                |tee==  >    |tee-a     ==>>     

eg:

root@localhost /]# head   /etc/passwd  |tee  file.txt    (|tee后若加上文件名,若没有可直接创造)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin



[root@localhost /]# cat  file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin


  既将前一个命令的标准输出作为后面文件的标准输入  又将前一个命令的标准输出直接在终端打印显示


|    |tee   两者最主要差别:|tee   还可以将前一个命令的标准输出直接在终端打印显示


|tee==  >    |tee-a     ==>>     

[root@localhost /]# head -2 /etc/passwd |tee file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost /]# head  -2 /etc/passwd |tee -a file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost /]# cat  file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

总结

文件内容编辑(创建文件)的三种命令:

vim

echo

cat

[root@localhost /]# vim   /etc/passwd

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]# echo  1234 >file111
[root@localhost ~]# echo  1234 1>file111
[root@localhost ~]# cat  file111
1234
[root@localhost ~]# echo  abcd  >file111
[root@localhost ~]# cat  file111
abcd                                      (对源文件进行覆盖)


[root@localhost ~]# cat


123
123


11111
11111


^C
[root@localhost ~]# cat  << .     (<<  加上终止结束字符(随便写)  )
> abc
> 123
> .

abc
123

[root@localhost ~]# cat << .   > file222   
> 11111  22222
> .                         (这样就不输入终端桌面上, 而是输入到文件file222)                   
[root@localhost ~]# cat  file222
11111  22222



文本内容处理命令

特点:  ①对文件的每一行进行处理

          ②不会对源文件产生影响,只会把处理的结果显示到终端

                                                            

cut  (对文本内容)剪切

-c  字符(字母  、 符号)[ -c  + n / n-n        =      (截取第几个字符 )/(从第几个字符截取到第几个字符)] 

-d  分割字符       [-d    + ... ( 截取对应内容,该内容是用....分割的,用  .... 表示)   ]

-f  分割字段        [-f     +  n / n,n ==n-n       =    (第几个字段) / (从第几个字段截取到第几个字段)  ]           多个字段可以用逗号隔开

注:  (-d 和 -f 成对出现,   -d在前  -f在后)   一个空格也算一个字段

eg:5

①提取文件file.txt前四个字符

[root@localhost /]# cat  file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin


[root@localhost /]# cut  -c 1-4  file.txt
root                (每一行文件1-4个字符)
bin:                 (一行一行的执行)                    
root
bin:

②提取文件file.txt每一行第三个字段(第一个数字)

[root@localhost /]# cat  file.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

[root@localhost /]# cut  -d : -f 3 file.txt
0                (必须先是分割字符-d 再是分割字段-f)
1                 (选项-d 参数 :   选项和参数可以不相隔  但为了方便记忆可以相隔)                     
0                                 
1

③若文件file.txt每行第一个字符就是:  ,那如何提取文件file.txt每一行第三个字段(第一个数字)

[root@localhost /]# vim  file.txt
[root@localhost /]# cat  file.txt
:root:x:0:0:root:/root:/bin/bash
:bin:x:1:1:bin:/bin:/sbin/nologin
:root:x:0:0:root:/root:/bin/bash
:bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost /]# cut  -d :  -f 4 file.txt
0
1
0
1



  -f4的解释:
  :前面是第一个字段----空格   此时第一个数字为第四个字段

若文件file.txt每行第一个字符就是:  ,那如何提取文件file.txt每一行第三个字段和第四个字段(第一个数字和第二个数字)

[root@localhost /]# cat  file.txt
:root:x:0:0:root:/root:/bin/bash
:bin:x:1:1:bin:/bin:/sbin/nologin
:root:x:0:0:root:/root:/bin/bash
:bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost /]# cut  -d :  -f 4 file.txt
0
1
0
1
[root@localhost /]# cut -d :  -f  4,5  file.txt
0:0
1:1                              
0:0
1:1
[root@localhost /]# cut   -d :  -f  4-5  file.txt
0:0
1:1
0:0
1:1
  

     (第四个、第五个字段==4,5   或   4-5)

eg:

因为cat 是对文本内容剪切 , 但是date不是文本内容,如何剪切?

[root@localhost ~]# date
Sat Nov 26 21:59:02 CST 2022
[root@localhost ~]# date |  cut  -d  " "  -f 4
22:00:56                    (截取对应内容,该内容是用空格分割的,用  "  "  表示  )


[root@localhost ~]# echo  "当前系统的时间"`date  |  cut  -d " "  -f  4`
当前系统的时间22:06:11

sort   文本内容排序   (都是一行一行的写)

默认按照文件的字符进行比较(从小到大)

-r  降序   按照文件的字符进行比较  (从大到小)

-n  按照数值比较 (从小到大)

-nr   降序  按照数值比较   (从大到小)

-u  uniqe  去重

#sort  -nu/-un   aaa    将文件中的行按照数值从小到大显示,并且重复行只显示一次

          (选项可以互换位置)

[root@localhost /]# vim  aaa
[root@localhost /]# cat  aaa
12
34
35
345
34
34
34
123
678
10
[root@localhost /]# sort  aaa
10
12
123         [默认按照文件的字符进行比较(从小到大)]
34
34
34
34
345
35
678
[root@localhost /]# sort  -r  aaa
678
35
345         [-r  降序   按照文件的字符进行比较(从大到小) ]
34
34
34
34
123
12
10
[root@localhost /]# sort  -n  aaa
10
12
34
34          [-n  按照数值比较 (从小到大) ]
34
34
35
123
345
678
[root@localhost /]# sort  -nr  aaa
678
345
123
35          [-nr   降序  按照数值比较(从大到小) ]
34
34
34
34
12
10
[root@localhost /]# sort  -nu  aaa
10
12
34          [-nu/-un   aaa    将文件中的行按照数值从小到大显示,并且重复行只显示一次]
35        (选项可以互换位置)
123
345
678

 uniq   去重 ,  重复行必须相邻(如果不相邻不会去重)

-c    显示重复次数

-d    显示文件重复出现的内容

-D   所有重复行

注:以上命令必须在重复行必须相邻(如果不相邻命令不会执行) 的条件下执行
命令演示

[root@localhost /]# sort  aaa |  uniq  -c
      1 10
      1 12
      1 123
      4 34
      1 345
      1 35
      1 678
[root@localhost /]# sort  aaa  | uniq  -d
34
[root@localhost /]# sort  aaa  |  uniq -D
34
34
34
34

eg:

如何显示文件出现次数最多的那一行

[root@localhost /]# cat  aaa
12
34
35
345
34
34
34
123
678
10
[root@localhost /]# uniq  aaa
12
34        重复行必须相邻(如果不相邻不会去重)
35
345
34
123
678
10

[root@localhost /]# sort  aaa | uniq
10
12
123
34
345
35
678
[root@localhost /]# sort  aaa |  uniq  -c
      1 10
      1 12
      1 123
      4 34
      1 345
      1 35
      1 678
[root@localhost /]# sort  aaa |  uniq  -c | sort
      1 10
      1 12
      1 123
      1 345
      1 35
      1 678
      4 34
[root@localhost /]# sort  aaa |  uniq  -c | sort  | tail  -1
      4 34



eg:

如何显示history历史执行频率最高前三的命令

第一步剪切掉前面的号码

573  sort  -r  aaa
  574  sort  -nr  aaa
  575  sort  -n  aaa
  576  sort  -nu  aaa
  577  cat  aaa
  578  uniq  aaa
  579  sort  aaa | uniq
  580  uniq  aaa
  581  sort  aaa |  uniq  -c
  582  sort  aaa |  uniq  -c | sort
  583  sort  aaa |  uniq  -c | sort  | tail  -1
  584  history
[root@localhost /]# history |cut -d " " -f 5- 
uniq  aaa
sort  aaa | uniq
uniq  aaa
sort  aaa |  uniq  -c
sort  aaa |  uniq  -c | sort
sort  aaa |  uniq  -c | sort  | tail  -1
history
history |cut -d " " -f 5-
[root@localhost /]# 
[root@localhost /]# history |cut -d " " -f 5- |  sort 
vim  file          (剪切历史命令第5个字段(包括第五个字段)以后的内容信息   然后按照文件的字符 
vim  /passwd                  进行从小到大进行排序 )
vim  passwd
vim  /tmp
vim  /tmp/newfile
vim  /tmp/newfile
vi  /tmp/newfile
wegt  -O /root/file/qq   https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm
wget 
wget  https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm
wget  -O /file/qq  https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm
wget -O /file/qq   https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm
wget  -o  /linuxqq_2.0.0-b2-1089_x86_64.rpm
wget  -o  /root/file/qq  https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm
y
y
y
y
y

[root@localhost /]# history |cut -d " " -f 5- |  sort |uniq -c
4 touch /root/file                                 (显示重复次数)
1 tree  /
1 tree  /1
2 tree /1
1 tree  /mnt
1 useradd redhat
2 vi
1 vi  /etc/passwd
4 vim

[root@localhost /]# history |cut -d " " -f 5- |  sort |uniq -c |sort
5 date                                              (再按照数字的大小进行排序)
5 ll  /pub
5 y
6 shutdown -h now
7  ll
8 ll /

[root@localhost /]# history |cut -d " " -f 5- |  sort |uniq -c |sort |tail -3
      6 shutdown -h now                              (最后在显示出现次数最多的三行)
      7  ll
      8 ll /





wc    文本统计 word

wc  FILENAME      默认统计指定文件的行、单词数、字节数  【存储单位数】  (数字、符号的数目)

-l       统计行数

-w     统计单词数

-c      统计字节数          (通常情况下一个字节=一个字符)

-m    统计字符数

命令演示:

[root@localhost /]# vim   bbb
[root@localhost /]# cat  bbb
aaa
bbb

[root@localhost /]# wc   bbb
3 2 9 bbb                       (行、单词数、字节数)  补:空格、换行符---$也算

                                注:在linux系统中 中文是代表3个字节
                                    繁体字代表4个字节





显示换行符操作:
aaa$
bbb$
$
~                                            
~                                            
~                                            
~                                            
~                                            
:set  list                 3,0-1         All


[root@localhost /]# wc  -l  bbb
3 bbb

eg:

描述文本文件一共有多少行

[root@localhost /]# wc  -l  bbb
3 bbb
[root@localhost /]# echo "bbb文件一共有`wc  -l bbb|  cut  -d  ' '  -f 1` 行"
bbb文件一共有3 行

tr    字符替换命令

tr   set1(原来的字符)   set2(要替换成的字符)

[root@localhost ~]# echo helloworld | tr  l 0          把l字符替换成0字符
he00owor0d
[root@localhost ~]# echo helloworld | tr  l 00
he00owor0d                                               (会根据字符长度自动匹配到对应长度的字符)

 [root@localhost ~]#  echo helloworld | tr  l 01
he00owor0d
[root@localhost ~]# echo helloworld | tr hl  0       把h l字符替换成0字符
0e00owor0d
[root@localhost ~]# echo helloworld | tr   -c  l 0    把除了l字符以外的所有字符都替换成0字符
00ll0000l00

[root@localhost ~]# echo helloworld | tr  -t  hl  0    相同位置的匹配替换(h与0替换  l没有对  0elloworld                                                                                                                应的字符)
[root@localhost ~]# echo helloworld | tr   -d  hl   删除字符:删除hl字符

[root@localhost ~]# echo helloworld | tr   -s(将多个连续重复字符可以替换成单个字符)

eg:

将多个连续重复的空格字符可以替换成单个空格字符

[root@localhost /]# echo  1  2      3 |tr -s " "  " "
1 2 3
[root@localhost /]# echo  1  2      3 |tr -s " "   :
1:2:3

#df  -h     查看文件系统使用情况


[root@localhost ~]# df  -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               867M     0  867M   0% /dev
tmpfs                  896M     0  896M   0% /dev/shm
tmpfs                  896M  9.5M  886M   2% /run
tmpfs                  896M     0  896M   0% /sys/fs/cgroup
/dev/mapper/rhel-root   17G  4.6G   13G  28% /
/dev/nvme0n1p1        1014M  257M  758M  26% /boot
tmpfs                  180M   24K  179M   1% /run/user/1000
/dev/sr0                11G   11G     0 100% /run/media/redhat/RHEL-8-5-0-BaseOS-x86_64
tmpfs                  180M     0  180M   0% /run/user/0
[root@localhost ~]# df  -h | tr -s " " " "
Filesystem Size Used Avail Use% Mounted on
devtmpfs 867M 0 867M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 9.5M 886M 2% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 4.6G 13G 28% /
/dev/nvme0n1p1 1014M 257M 758M 26% /boot
tmpfs 180M 24K 179M 1% /run/user/1000
/dev/sr0 11G 11G 0 100% /run/media/redhat/RHEL-8-5-0-BaseOS-x86_64
tmpfs 180M 0 180M 0% /run/user/0

grep 文本过滤显示命令***  shell  文本三剑客  grep  sed  awd

格式:

#grep       '关键字'        文件名         ( 只过滤这个关键字)

#grep    -v  '关键字'      文件名         ( 过滤出除了这个关键字的信息)

# grep   -o   'root'     /etc/passwd    (只把root关键字打印到终端)

# grep   -i   'ROOT'     /etc/passwd    过滤关键字忽略大小写

[root@localhost ~]# grep  'root'  /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep  -o 'root'  /etc/passwd
root
root
root
root
[root@localhost ~]# grep   -v 'root'  /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

eg:

过滤出文件中除了行首的# 以外的信息

[root@localhost /]# grep     -v  '^#'  文件名

注:顶尖符 --  ^  (在vim中 ^ 也表示行首的意思)

       空白行--  ^$                 注:输入时都要加上‘  ’

过滤出文件中除了行首的# 以外的信息  空白行也除外

[root@localhost /]# grep     -v  '^#'  文件名 | grep  -v  '^$'  

作业题:

1.将/etc/passwd 文件中3,4 字段分别截取出来分别写入文件UID和文件GIU但是这两个文件中的信息是以数值由大到小的形式显示;

2.通过查看时间命令将分别将年月日时分写入A文件

3.告诉用户当前系统有多少用户 (/etc/passwd文件有多少行一行是一个用户信息)。

4.不显示/etc/login.defs 文件中以#开头的行以及空白行。

1.将/etc/passwd 文件中3,4 字段分别截取出来分别写入文件UID和文件GIU但是这两个文件中的信息是以数值由大到小的形式显示;

[root@localhost ~]# cat  /etc/passwd |cut  -d :  -f  3 |sort  -rn  >UID

[root@localhost ~]# cat  /etc/passwd |cut  -d :  -f  3 |sort  -rn  |tee  UID


[root@localhost ~]#more  /etc/passwd |cut  -d :  -f  3 |sort  -rn  >UID

[root@localhost ~]# less  /etc/passwd |cut  -d :  -f  3 |sort  -rn  |tee  UID


[root@localhost ~]#cut -d :  -f  3  /etc/passwd  | sort  -rn  >  UID  

[root@localhost ~]#cut -d :  -f  3  /etc/passwd  | sort  -rn    |tee   UID

相关知识点:|tee==  >    |tee-a     ==>>   

在内容信息比较多的时候:

more    FILENAME  分屏显示文件内容,最后将内容输出到终端

less     FILENAME   分屏显示文件内容,打开文件阅读   退出q   换页:空格--切换下一页   b--切                                    换上一页      /关键词   匹配关键词n  (下一个)  N(上一个)     /或?关键词
 

注:查看文件内容可以用cat 、tac    也可以用 more 、 less (分页显示)

  但echo(打印命令) 不可以用,只是对输入结果(名字)这个字面信息处理显示在终端,并没有读取查看文件内容

2.通过查看时间命令将分别将年月日时分写入A文件

[root@localhost ~]# date
Thu Dec  1 17:59:18 CST 2022
星期 月  日   时间        年

补:linux中手动改时间

root@localhost redhat]# date -s "2022-12-1 10:05:00"
Thu Dec  1 10:05:00 CST 2022
[root@localhost redhat]# date
Thu Dec  1 10:05:07 CST 2022

[root@localhost ~]# date
Thu Dec  1 14:04:55 CST 2022

[root@localhost ~]# date  |cut  -d " " -f  2,4,5,7  (注意有的地方有两个空格,若以空格分割字
Dec 1 14:10:00 2022                             符,则第二个空格算做一个字符)

[root@localhost ~]# date |  cut -d " " -f 7 >A 
[root@localhost ~]# cat A
2022
[root@localhost ~]#  date | cut -d " " -f  2,4,5 | cut -d : -f 1,2
Dec 1 14:28                                         (除去秒 选:为分割字符)
[root@localhost ~]# date | cut -d " " -f  2,4,5 | cut -d : -f 1,2 >>A
[root@localhost ~]# cat A                                     (用追加重定向符)
2022
Dec 1 14:29

3.告诉(显示)用户当前系统有多少用户 (/etc/passwd文件有多少行一行是一个用户信息)。

[root@localhost ~]# wc  -l /etc/passwd
46 /etc/passwd
[root@localhost ~]# wc  -l /etc/passwd |cut -
d  " "  -f 1
46
或
[root@localhost ~]# wc  -l /etc/passwd |cut -c 1-2
46
[root@localhost ~]# echo 当前系统共有`wc  -l /etc/passwd | cut -d " " -f 1`
当前系统共有46

4.不显示(过滤掉)/etc/login.defs 文件中以#开头的行以及空白行。

[root@localhost ~]# grep -v  '^#' /etc/login.defs

MAIL_DIR	/var/spool/mail

UMASK		022

HOME_MODE	0700

PASS_MAX_DAYS	99999

[root@localhost ~]# grep -v  '^#' /etc/login.defs |grep -v '^$'
MAIL_DIR	/var/spool/mail
UMASK		022
HOME_MODE	0700
PASS_MAX_DAYS	99999



补:

①显示命令是否能成功:

[root@localhost /]# echo  $?
0                                ---成功



(0  成功    ,  1   错误)

注:与计算机领域中逻辑真假正好相反

逻辑真:1          逻辑假: 2

②查看操作历史:

[root@localhost /]# history
 548  head  /etc/passwd  |tail  -1 /etc/passwd
  549  head  /etc/passwd  | tail  -1
  550  echo  $?
  551  history

③显示换行符操作:

在vim编辑器中末行模式之下输入:  :set  list

aaa$
bbb$
$
~                                            
~                                            
~                                            
~                                            
~                                            
:set  list                 3,0-1         All

④字节和字符的区别为:
一、指代不同
1、字节:指一小组相邻的二进制数码,是计算机重要的数据单位。
2、字符:表示数据和信息的字母、数字或其他符号。
二、侧重点不同
1、字节:侧重于表示计算机所计数的最小单位。
2、字符:侧重于表格编辑时,显示器显示的最小计数单位。
三、引证用法不同
1、字节:数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。
2、字符:字符包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符在计算机内存放,应规定相应的代表字符的二进制代码

(通常情况下一个字节=一个字符)

新手小白,请多多指教~~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值