• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

LINUX三剑客

武飞扬头像
霍老湿
帮助1

Linux三剑客

管道

shell 输入域输出

在介绍管道时,先来介绍shell的输入与输出

read:用来读取输入,并赋值给变量,他的用法也很简单,就是 read x 后面跟一个变量,回车后系统会等到你输入值,再回车就可以把值存储到变量里。用
echo $x 就能打印出存入变量了的数据。

echo , printf:可以简单输出变量


        read xkkkjk➜  ~ echo $xkkkjk➜  ~ printf $xkkkjk#

> file:将输出重定向到另外一个文件。例如:echo 123 > 4.txt 这个语句的意思是将echo输出的内容写到一个文件里,这里的 >
就起到这样一个作用。但是他会覆盖文件里原有的内容如果要在一个文件里追加内容就可以用 >> ,这样就不会覆盖原来的内容。< file表示输入重定向。

文件描述符

一个程序有输入有输出也会有错误

在Linux里面,为了表示这三种状态用三个不同的标记符来表示。

- 标准输入0——输入文件

- 标准输出1——输出文件

- 标准错误2——错误输出文件

例如:打开一个不存在的文件,这就是一个错误输出2,正常打开一个文件就是正常输出1, read x从外界读取一个内容时就是正常输入0.

管道

管道的作用是吧不同程序的输入和输出连接,在Linux中是 |

由图可以看出上一个程序的输出是下一个程序的输入。

例如:cat <文件> | less, cat打印出的内容传递给了less。

在管道里遇到的坑

  •  
        echo 12345 | read x

运行完之后, echo $x 你会发现输出的内容是空的。

原因是管道会独立开启一个进程,echoread不在一个进程里的。你在新的进程里面创建的变量,进程执行完,变量也会随之消失。

解决方案:echo 12345 | while read x;do echo $x;done这样就行了。

- grep 数据的查找定位

- awk 数据切片

- 数据修改

grep

- 全称:Global Regular Expression and Print out the line

- 基于正则表达式查找满足条件的行

用法

grep pattern file:pattern意思是给定一个正则,file是一个文件,如果没有文件他会读取你的标准输入。举一个简单的例子:


[root@123456 ~]# grep 5  #输入并回车

1 2 3

4 5 6                    #输入内容

4 5 6                    #输出内容

当grep发现发现有5的那一行,他就会打印出来

而利用管道就简单了


[root@123456 ~]# echo '1 2 3

4 5 6

7 8 9' | grep 5

4 5 6

查找文件内容


grep x 1.txt

从文件中查找匹配的行

参数介绍:

- grep -i pattern file:忽略大小写

- grep -v pattern file:不显示匹配的行

- grep -o pattern file:把每个匹配的内容用独立的行显示

- grep -E pattern file:使用扩展正则表达式

- grep -A -B -C pattern
file:打印命中数据的上下文,-Ax打印匹配的下x行,-Bx打印匹配到的上x行,-Cx打印匹配到的上下x行。

- grep pattern -r dir/:递归搜索,遍历指定目录下的所有文件的内容

awk

- 名字是三个作者的简写

- 根据定位到的数据行处理器中的字段

- awk是Linux下的一个命令,同时也是一种语言解析引擎

- awk具备完整的编程特性。比如执行命令、网络请求等

语法 awk 'pattern{action}'

awk理论上可以代替grep,简单用法:


[root@123456 ~]$echo '123xxxx123456' | awk '/xxx/'

123xxxx123456

- awk 'BEGIN{}END{}'开始和结束的时候执行一次操作

- awk ‘/Running/’ 表示正则匹配

- awk ‘/aa/,/bb/’ 表示区间的匹配。以aa开头的匹配和bb结束时的匹配

awk内置变量

FS:字段分隔符echo '1 2 3' | awk -F ' ' '{print $1}'

OFS:输出数据的字段分隔符echo '1 2 3' | awk -F ' ' '{OFS="-"}{print $1,$2,$3}'
将分隔符改成指定的

RS:记录分隔符

ORS:输出字段的行分隔符,每一行加一个分隔符

NF:字段数,通常表示最后一个字段echo '1 2 3' | awk -F ' ' '{print $(NF-1)}'NF是最后一个,NF-1相当于$2输出的就是2

NR:记录数,默认的一行为一个记录数。用法 awk 'NR>1' test.txt作用是输出大于一行的内容

sed

- stream editor

- 根据定位到的数据进行修改数据

他的格式为:sed [addr]X[options]

- addr:是一个定位表达式

- X:表示一个动作,是打印还是

- options:追加具体的参数

- 例如:sed -n '2p'打印第二行,d删除、p打印通常结合-n参数

- 用的比较多的就是 sed 's#hello#world#'
对字符串进行修改。s表示search表示查找替换的意思,#可以用其他的符号进行替换。表达式的最后跟一个g,表示全局替换。

- -e 表示匹配多个表达式

- -i直接修改原文件

- -E扩展表达式

- --debug 调试

正则表达式

基本表达式(BRE)

^ 表示以某个内容开头,$ 表示以某个内容结尾


[root@123456 ~]$echo 1234 | grep ^1

1234

[root@123456 ~]$echo 1234 | grep 4$

1234

  

[a-z],[0-9] 表示一个区间,也可以是任意的字符 [456]


[root@123456 ~]$echo '123

> abc
> 12a' | grep [0-9]
123

12a

  • 表示0个或多个星号前面的字符

[root@123456 ~]$echo '12333

> abc3
> 12a' | grep -o 3*
333

3

. 表示任意字符


[root@123456 ~]$echo '12333

> abc3
> 12a' | grep -o a.
ab

扩展正则表达式(ERE)

- ?表示非贪婪匹配

- 一个或多个

- ()分组

- {} 范围约束

- | 匹配多个表达式的任何一个

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgbfage
系列文章
更多 icon
同类精品
更多 icon
继续加载