“Linux-2020-spring-4-8”的版本间的差异

来自SUDA-HLT
跳到导航 跳到搜索
(创建页面,内容为“一、复习 *通配符 *重定向 *命令行参数 二、本节重点 *find 命令 $find . -name '*.txt' $find / -name 'find' 为了不再屏幕...”)
 
 
(未显示同一用户的18个中间版本)
第1行: 第1行:
−
一、复习
+
== 复习 ==
−
 
 
 
*通配符
 
*通配符
−
 
 
*重定向
 
*重定向
−
 
 
*命令行参数
 
*命令行参数
  
 +
== find 命令 ==
 +
* 从目录树中搜索文件(默认是递归查找)
 +
* -name选项默认支持通配符
 +
    $ find . -name '*.txt' 
 +
    $ find / -name 'find' # 文件的名字是find
 +
      Permission denied(报错)
 +
      为了不再屏幕上显示错误信息?重定向,或者以root权限来做
 +
    $ find / -name 'find' 2> x.txt
 +
    $ find / -name 'find' 2> /dev/null # 黑洞输出设备
 +
    $ sudo find / -name '??????????' :查找文件名字为十个字符的文件,以root的名义
  
−
二、本节重点
+
== egrep命令 ==
−
*find 命令
 
  
−
    $find . -name '*.txt'
+
* grep:查找并输出可以匹配指定模式的所有行(我猜对应的英文缩写:get RE pattern;另一个解读是global search RE and print out the lines)
−
    $find / -name 'find'
+
  egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。egrep是用extended regular expression语法来解读的,而grep则用basic regular expression 语法解读,extended regular expression比basic regular expression的表达更简单,不用频繁使用转义符\backslash。
−
    为了不再屏幕上显示错误信息:重定向
+
* 一些例子
−
    $find / -name 'find' 2> x.txt
 
−
    $find / -name 'find' 2> /dev/null
 
−
    $sudo find / -name '??????????' :查找文件名字为十个字符的文件
 
−
 
−
*egrep命令:
 
−
 
 
−
1、egrep命令用于在文件内查找指定的字符串。egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。egrep是用extended regular expression语法来解读的,而grep则用basic regular expression 语法解读,extended regular expression比basic regular expression的表达更规范。
 
−
 
 
−
2、grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
 
 
     $egrep 'int' main.c
 
     $egrep 'int' main.c
−
     $egrep -n 'int' (ctrl + d 输入结束)
+
     $egrep -n 'int' # ctrl+d或记为^D,表示输入结束,-n表示同时输出行号
 
     $egrep -n '[ijklm]nt'
 
     $egrep -n '[ijklm]nt'
−
     $egrep -n '[^0-9]nt':加^表示取反
+
     $egrep -n '[^0-9]nt'
 
     $egrep -n '[0-9]nt'
 
     $egrep -n '[0-9]nt'
 
     $egrep -n '.nt'
 
     $egrep -n '.nt'
第37行: 第34行:
 
     $egrep -n '^(abc|bcd)'
 
     $egrep -n '^(abc|bcd)'
 
     $egrep -n '^(abc|bcd)$'
 
     $egrep -n '^(abc|bcd)$'
 +
* egrep还有一些选项很有用,如
 +
  -o
 +
  -A
 +
  -B
 +
 +
==正则表达式 regular expression==
 +
 +
推荐大家采用我的最新讲义来系统学习RE,目前未定稿,欢迎大家提出问题和建议:链接为[[File:Linux-RE.pdf]]
 +
 +
*定义Definition:RE是满足正则语言语法的一个字符串,作为一个抽象的模式,用以匹配一个、多个甚至无穷多个实际的字符串。
 +
 +
例子都在上面。
 +
* literal字面意思
 +
* [ ] 字符集, [^ ]补集'
 +
* 自定义字符集
 +
  \w [ [:alphanum:]]
 +
  \d [ [:digit:]]
 +
  \s
 +
* .  任意一个字符,不能匹配\n\r
 +
* 重复修饰符(默认为贪心greedy匹配最长的字符串)
 +
  * 表示前面的字符匹配0次到n次
 +
  ? 表示可取0个/1个
 +
  + 重复一次到无穷多次
 +
  {3} 重复3次
 +
  {3,5} 3次到5次
 +
  {3,} 3次到无穷
 +
* 分组group ()
 +
* | 或Alternation
 +
* 定位符anchoring
 +
  ^表示行首
 +
  $表示行尾
 +
  \< \>表示单词的首/尾
 +
  \b表示单词边界
 +
  \B表示非单词边界
  
−
*正则表达式 regular expression
 
  
−
正则表达式的定义:表达正则语言的一个式子;以一定规则写出来的一个字符串,作为一个抽象的模式,用以匹配一个、多个甚至无穷多个实际的字符串。
+
* 通配符和正则表达式的对应
 +
  *      ?
 +
  .*      .
  
−
1、literal字面意思
+
== 一些讨论 ==
  
−
2、[ ] 字符集 $egrep -n '[0-9]nt'
+
* 正则语言所处的位置
−
 
+
  正则语言:正则表达式所能表达的所有字符串的集合:OR符合正则语言语法的所有RE的集合(这两个意思是不同的,需要琢磨一下,我倾向于后者)
−
3、 .  任意一个字符,不能匹配\n\r
+
  上下文无关语言:context-free language
 +
  程序语言:program language
 +
  自然语言:natural language
  
−
4、重复修饰符(贪心 greedy): * 表示前面的字符匹配0次到n次;? 表示可取0个/1个 ;+ 重复一次到无穷多次 ;{3} 重复3次;{3,5} 三次到五次 ;{3,} 三次到无穷
+
== 课堂讨论 ==
  
−
5、分组:() ;| 或
+
重复修饰符:表示前一个单元(作为整体、不可分割)的重复次数
  
−
6、定位符:^表示行首,$表示行尾,单词的首/尾(自学)
+
优先级:分组(括号)>  重复 >  拼接 > 或(|)
  
−
  通配符    *        ?
 
  
−
  正则表达式    .*      .
+
== 补充学习 ==
  
−
C语言的特点:1、高级语言:它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。 2、结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。4、代码级别的跨平台:由于标准的存在,使得几乎同样的C代码可用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要进行硬件操作的场合,优于其它高级语言。 5、使用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。
+
find
 +
根据文件的访问(修改)时间?
 +
根据文件大小?

2020年6月10日 (三) 04:15的最新版本

复习

  • 通配符
  • 重定向
  • 命令行参数

find 命令

  • 从目录树中搜索文件(默认是递归查找)
  • -name选项默认支持通配符
   $ find . -name '*.txt'  
   $ find / -name 'find' # 文件的名字是find
     Permission denied(报错)
     为了不再屏幕上显示错误信息?重定向,或者以root权限来做
   $ find / -name 'find' 2> x.txt
   $ find / -name 'find' 2> /dev/null # 黑洞输出设备
   $ sudo find / -name '??????????' :查找文件名字为十个字符的文件,以root的名义

egrep命令

  • grep:查找并输出可以匹配指定模式的所有行(我猜对应的英文缩写:get RE pattern;另一个解读是global search RE and print out the lines)
 egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。egrep是用extended regular expression语法来解读的,而grep则用basic regular expression 语法解读,extended regular expression比basic regular expression的表达更简单,不用频繁使用转义符\backslash。
  • 一些例子
   $egrep 'int' main.c
   $egrep -n 'int' # ctrl+d或记为^D,表示输入结束,-n表示同时输出行号
   $egrep -n '[ijklm]nt'
   $egrep -n '[^0-9]nt'
   $egrep -n '[0-9]nt'
   $egrep -n '.nt'
   $egrep -n 'a*bc'
   $egrep -n 'a*?bc'
   $egrep -n 'a?bc'
   $egrep -n '[0-9]*bc'
   $egrep -n 'abc|bcd'
   $egrep -n '(abc|bcd)[0-9]+'
   $egrep -n '^(abc|bcd)'
   $egrep -n '^(abc|bcd)$'
  • egrep还有一些选项很有用,如
 -o 
 -A
 -B

正则表达式 regular expression

推荐大家采用我的最新讲义来系统学习RE,目前未定稿,欢迎大家提出问题和建议:链接为文件:Linux-RE.pdf

  • 定义Definition:RE是满足正则语言语法的一个字符串,作为一个抽象的模式,用以匹配一个、多个甚至无穷多个实际的字符串。

例子都在上面。

  • literal字面意思
  • [ ] 字符集, [^ ]补集'
  • 自定义字符集
 \w [ [:alphanum:]]
 \d [ [:digit:]]
 \s
  • . 任意一个字符,不能匹配\n\r
  • 重复修饰符(默认为贪心greedy匹配最长的字符串)
 * 表示前面的字符匹配0次到n次
 ? 表示可取0个/1个
 + 重复一次到无穷多次
 {3} 重复3次
 {3,5} 3次到5次
 {3,} 3次到无穷
  • 分组group ()
  • | 或Alternation
  • 定位符anchoring
 ^表示行首
 $表示行尾
 \< \>表示单词的首/尾
 \b表示单词边界
 \B表示非单词边界


  • 通配符和正则表达式的对应
 *       ?
 .*      .

一些讨论

  • 正则语言所处的位置
 正则语言:正则表达式所能表达的所有字符串的集合:OR符合正则语言语法的所有RE的集合(这两个意思是不同的,需要琢磨一下,我倾向于后者)
 上下文无关语言:context-free language
 程序语言:program language
 自然语言:natural language

课堂讨论

重复修饰符:表示前一个单元(作为整体、不可分割)的重复次数

优先级:分组(括号)> 重复 > 拼接 > 或(|)


补充学习

find

根据文件的访问(修改)时间?
根据文件大小?