博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux常用指令-更新中
阅读量:5146 次
发布时间:2019-06-13

本文共 3334 字,大约阅读时间需要 11 分钟。

文件查找 find

简单的find

# 查找当前目录下的某个文件find -name "target.java"

带有正则表达式的find

#从根目录下 . 用户目录 ~ 查找某个文件find . -name "target.*"# 这里需要注意的是'和"在对于普通字符串来说是没有区别的,对于find -name来说""中只会被最终解析成一个字符串

忽略大小写

# 忽略大小写find -iname 'target.*'

其他指令

man find

检索文件内容-grep

grep [options] pattern [file]

全称:Global Regular Expression Print

作用:查找文件里符合条件的字符串

补充:部分符合,不是完全匹配,必须要和patter符合,并且是按行匹配。strpattern

str pattern match
'strrrrr' 'str' 'strrr1'
'trrrrr' 'str' None
'trrr1
str something behind you
strr1
st
end'
'str' 'str something behind you
strr1'
'trrr1
str something behind you
strr1
st
end'
'str*' 'str something behind you
strr1
stend'
存疑(表达式中是正则表达式'r*'可能存在r)

指令man:

  • -o, --only-matching Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line. -o输出正则表达式匹配的数据不是行
  • -v, --invert-match Invert the sense of matching, to select non-matching lines.-v 反向过滤
# 找出日志中WARN 的部分并使用-o打印出对应部分 'WARN'grep 'WARN' house-info.log | grep -o 'WARN'
# 去除自身的部分ps -aux  | grep postfix | grep -v 'grep'# 匹配以A开头的grep '^A' house-info.log # 匹配以B结尾的grep 'B$' house-info.log# 匹配正整数grep '[1-9][0-9]*' house-info.log # 由于默认的模式下不支持\d 和 \D,+.?,+被改为了\+,?为\?

流重定位符

/> 用于重定向流到文件中,会进行覆盖而不是追加

/>>用于重定向流到文件中,进行追加

0:屏幕输入流,1:屏幕正确输出流,2:屏幕错误输出流

1>:以覆盖的的方式将正确的数据重定向到指定的文件或装置上

2>:以覆盖的方式将错误的数据重定向到指定的文件或设备上

既然已经提到流重定向,不放再提提Linux黑洞 /dev/null,能处理不需要的信息

command>a 2>a 与 command>a 2>&1的区别

通过上面的分析,对于command>a 2>&1这条命令,等价于command 1>a 2>&1可以理解为执行command产生的标准输入重定向到文件a中,标准错误也重定向到文件a中。那么是否就说command 1>a 2>&1等价于command 1>a 2>a呢。其实不是,command 1>a 2>&1command 1>a 2>a还是有区别的,区别就在于前者只打开一次文件a,后者会打开文件两次,并导致stdout被stderr覆盖。&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的a。从IO效率上来讲,command 1>a 2>&1command 1>a 2>a的效率更高。

也就是说command 1>a 2>a打开两次文件

awk 三个人名

awk [选项参数] 'script' var=value file(s)

或awk [选项参数] -f scriptfile var=value file(s)

awk -F "splitor"

awk需要制定文件分割符,默认为' ' ,需要注意的是空格的指定是通过-F。常用的常量包括NR(Number of Rows行数),FS(不知道英文 当前行分割符),NF(当前拥有的字段数 $0的长度)

grep '\[ ACC \]' new.txt | awk -F " " '{res[$9]++ }END{for(i in res){print 'name:' i "\tnumber:" res[i]}}'# 统计每个单词出现的次数 以空格为分割符awk -F " " '(NR>=1){res[$9]++ }{print "rows:"NR "\tname:"$9 "\tNF:"NF}END{for(r in res)print r "\tnumber:" res[r]}' new.txt

需要注意的是每行执行体中只能执行一个语句{}{res[$9]++ print $9}是不正确的需要改为{res[$9]++}{print $9}

'和"

'表示纯粹的字符串

"表示的字符串还需要经过解析

n = 3echo '$n' # '$n'echo "$n" # 3

sed指令

sed全名为stream editor 流式编辑器,也是一个以行为单位的工具,主要用于替换而不是查找,统计

常用命令:

a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

字符串替换opeartion/old/new/modelmodel为可选参数g|Noneg代表替换一行中的所有匹配的东西

替换操作s

# 进行替换而不修改原来的文件 替换全部str为String 注意包含有g,意味着全部替换sed '/s/str/String/g'   target3.java# 进行替换并修改文件sed -i ........# 替换文件并修改到指定的临时文件上 注意使用的是"",使用双引号而不是单引号可以使shell脚本更加灵活sed -f "newFile_$$" '/s/str/String/g'   target3.java

删除和打印操作

sed -n '1p' file #显示第一行sed -n '$p' file #显示最后一行sed -n '1,2p' file #显示第一行到最后一行sed -n '1,$p' file# 删除的话将p换为d

需要进行更加复杂的定位比如第二行到倒数第三行需要在自己计数给出范围

tar指令

-z,--gzip,--gunzip,--ungzip 调用执行压缩或解压缩。

-v,--verbose 列出每一步处理涉及的文件的信息,只用一个“v”时,仅列出文件名,使用两个“v”时,列出权限、所有者、大小、时间、文件名等信息。

-f,--file [主机名:]文件名 指定要处理的文件名。可以用“-”代表标准输出或标准输入

-x,--extract,--get 解开tar文件

-c,压缩文件

压缩

tar -czvf

解压

tar -xzvf

转载于:https://www.cnblogs.com/Heliner/p/11074707.html

你可能感兴趣的文章
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
01: socket模块
查看>>
mysql触发器
查看>>
淌淌淌
查看>>
web页面实现指定区域打印功能
查看>>
win10每次开机都显示“你的硬件设置已更改,请重启电脑……”的解决办法
查看>>
VMware环境和Window环境进行网络连接的问题
查看>>
macOS10.12允许所有来源设置
查看>>
C++有关 const & 内敛 & 友元&静态成员那些事
查看>>
函数积累
查看>>
python搜索引擎(转)
查看>>
关于height,line-height导致的样式混乱的问题
查看>>
《SEO实战密码》读后一点感受
查看>>
bzoj 4815 [Cqoi2017]小Q的表格——反演+分块
查看>>
Swift 入门之简单语法(六)
查看>>
shim和polyfill有什么区别
查看>>
Failed to load the JNI shared library “E:/2000/Java/JDK6/bin/..jre/bin/client/jvm.dll
查看>>
〖Python〗-- IO多路复用
查看>>
栈(括号匹配)
查看>>
Java学习 · 初识 面向对象深入一
查看>>