九个至关重要的linux命令

前后花了一周的时间,学习了9个命令,分别是 find, xargs, grep,sed,tr,awk,cut,sort,uniq。 

开启了linux命令学习的旅程,进了文件管理和文本处理的坑。

学习一个命令,要掌握它的使用,一个是要彻底理解这个命令的使用规则,输入和输出是怎样的,另一个是多多练习。

当有需求的时候,多用命令行去操作。

find:

find  filepath -options expression

在指定目录下,按照一定的条件搜索出文件。

搜索条件就是文件的属性,比如大小,名称,所有者,访问权限,访问时间。

-print
-print0 输出内容,边界符为'\n' 或 '\0'
-name 按照文件名查找
-exec 对查询到的结果执行相关操作
-regex 正则表达式
-maxdepth 最大查找深度
-mindepth
-iregex 忽略大小写的正则表达式
! 输出为不匹配条件的结果
-prune 排除指定条件的结果。


重点:很多时候我们不单单是为了搜索文件,而是在这些结果上做一些操作。
-exec
find . -name "*.c" -exec chmod 644 {} \;
{} 是一个变量,值为查询的结果的每一个文件名,上面的意思就是对每一个文件名执行该命令。

涉及到多个条件:
  同时满足,与条件:直接写多个选项即可
  满足一个即可,或条件:-name "*.pdf" -o -name "*.txt"

排除某个目录:
  find . \( -name "flasky" -prune \) -o \( -name "*.txt" -print \)
  排除了名字为flasky的目录,后一个是要查询的条件语句。


xargs:
将标准输出格式化为参数列表,这个列表作为命令行参数,传给下一个命令。格式的过程是,把输入根据一个边界符进行切分,得到一个列表,默认为空格符(空格、换行、制表)
commands |args commands2

cat a.txt|xargs
hjdkfjsd ksdjfksdjf ksjdfksjf s dio iksjdfkjsdkfjsd ksjdfksdjfks hello

-n 指定一行有多少个参数 
-d 指定切分的边界符
-I 对参数列表进行迭代,而非整体作为参数。每个参数都执行一遍。
cat a.txt|xargs -I {} echo hello {}

与find合在一起使用:
找到所有txt文件,然后把他们删掉。
find . -name "*.txt" -print0 |xargs -0 rm -f

grep:
指定搜索的串,和要搜索的文件或目录,进行搜索。输出为匹配的一整行内容。
和find 比较起来,find是按照文件属性搜索,先指定搜索范围,再指定条件。一个是按照文件内容搜索,先指定条件,再指定搜索范围。

grep "match_pattern" file_path -options

思考一下,我们对于文本检索都有怎样的需求呢?
从某个文件中查指定的串,ctrl+f
全局搜索,看代码的时,对整个项目搜索,看哪里使用过某个串或某几个串。

忽略大小写的搜索

搜索不匹配的部分(这个好像有点奇葩)

有时候对内容不感兴趣,在乎哪些文件包含了想要的内容。输出文件名。
替换。找到某个串,进行替换(当然,光用grep做不到这些。)

搜索条件:
-i 忽略大小写
-E 使用正则表达式 或egrep
-e 连接多个匹配,满足其中的一个即可。

搜索目录调整:
-r 对指定目录进行遍历搜索
-include 根据文件名指定范围
-exclude 排除指定的文件

结果过滤:
-l 输出所在的文件名。
-c 统计匹配的总行数,不是出现的个数,有可能一行有多个。
-o 只输出匹配到的文本部分,而不是一整行。
-v 输出不匹配的行。
-n 输出所在行号。
-b 输出所在列号。
-A 3 输出匹配的行以及后面3行
-B 3 输出匹配的行以及前面3行
-C 3 输出匹配的行以及前后3行


sed
有两个可以替换的命令,sed是其中一个比较强大的工具。

替换的过程是: 先匹配需要替换的内容(正则表达式),指明替换后的内容。

sed "pattern_stirng" file

"s/patern/replace_string/g"
对文件按照partern 进行匹配,把所有匹配的项使用replace_string进行替换。
/ 是指令字串的分隔符,也可以用 : | 分隔

g前面有一个系数,表示从第几个匹配项开始替换。
每一个匹配都会保存到变量&中,可以使用&进行加工处理。

'/pattern/d' 把匹配的字符删掉,也就是用空字符替换掉。

子串匹配: 在pattern 里使用()进行区分,在替换的时候,使用\1表示第一个括号的子匹配进行代替。
通常用于,匹配后的部分需要调整的情况。例,对于拥有两个单词的一行,调整两个单词的顺序。
sed 's/\(\w\+\) \(\w\+\)/\2 \1/g' a.txt

-i 把替换作用到原文件中。

tr
另一个替换的命令。与sed不同的是,它是字符集合的操作。通过两个集合的一一对应关系,做出替换。

可以理解成这是一个译码和解码的过程。用set2 对set1进行译码。如果要解码,交换set1,set2的顺序即可。

tr set1 set2 
由于是一一对应的关系,如果前者小于后者,则重复最后一个字符;如果大于后者,则忽略多余的字符

-c set 获得set的补集,全集是输入流的内容。
-d set 删除输入中的所有字符集合内的字符。
-s set 删除多余连续的set中的字符,留一个。

tr和sed 什么时候是一样的?如果是一个字符换另一个字符,没有区别。

 

awk
对文件进行迭代时如果要执行相关的操作,可以使用awk。这个工具简直屌爆了,对内容进行迭代。

如果有对内容进行筛选,统计等。可以联系一下这个工具。

awk 'BEGIN{begin statements}{}END{end statements}' a.txt

指令结构: 
1.BEGIN{begin statements} 迭代前的操作,声明变量等
2.{} 迭代每一行后执行的操作
3.END{end statements}  文件迭代完毕的操作。
其中,1,2,3任意一个都是可以省略的。

用来计算一个文件的行数(当然,用awk来做这种简单的事情,就是对awk的污辱):
awk 'BEGIN{i=0}{i++}END{print i}' a.txt

可以看到,{} 里面包含的是可执行的语句。
多条的语句用;分隔。

一些超级好用的变量:
当前行行号:NR,统计行数的时候,直接在结尾输出这个也可以。 awk 'END{print NR}' a.txt
当前的段数:NF,以空格字符作为分隔。
当前行的内容: $0
当前行某个段的内容:$1

它竟然还能实现类似grep 的功能,根据查找条件搜索,输出匹配的行。
awk '/linux/' a.txt
awk '!/linux/' a.txt
行号条件:
awk 'NR<5' a.txt
awk 'NR==1,NR==4' a.txt

-F 由于计算段数默认是按照空白字符来算的,如果是其他的,就要调整定界符。
awk -F: '{print NF}' a.txt 
awk 'BEGIN{FS=":"}{}' a.txt

 

cut
根据字段,字符,字节等作处理。 要注意的是,默认定界符为制表符‘\t’。

它能够做的事情就是,把文件看成一个表格,把具体的列找出来。
cut -option filiename

-f 按段数分割
--complement 取补集操作
-d 指定定界符
-c  按字符输出
-b 按字节输出 

可以这样指定范围,N-(第N个到最后) N-M -M(第一个到第M个)

sort
对文件按照一定的规则排序,这个命令也不错,虽然简单,但是给工作带来了极大的方便。
commands |sort -options filename
sort -options filename
options 指定 按照怎样的规则排,以哪一列为标准排,逆序还是正序。
无 按字典序
-n 按数字
-d 按字典
-k 指定列 这里的字段用的是空格字符,如果是按其他分隔,需要先替换成空格字符。
-r 逆序

uniq
去除连续重复的内容。常与sort连用。
uniq filename
commads|uniq

一般需要先将数据排序,再使用uniq命令,否则会出现错误和遗漏。uniq只检查连续的行。

-c 统计各行出现的次数
-d 输出所有连续重复的行
-s -w  选择一行中的某个范围作为比较对象。-s a 忽略前a个字符,从a+1开始 -wb 比较的字符数为b

 

一下子撸了九个命令,脑袋一片空白,突然感觉到什么都没学到一样。

总结一下,不要为了学命令而学,一定要有具体的使用场景和需求。

其次,提到一个命令,一定要在脑海里回忆以下四点,经常思考,做到融汇贯通:

1.它是做什么的?能帮我解决怎样的问题?

2.它的格式是怎样的?通过输入什么,得到怎样的输出?

3.它有哪些选项,各个选项的作用又是怎样的?

4.使用的时候有什么需要注意的地方?

用ubuntu有一段时间了,接下来会总结一些常用的系统命令和系统相关的内容。







 

转载于:https://www.cnblogs.com/tangheiguo/p/6622219.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值