liunx 进阶技术
以下命令非学习阶段常用,在工作设汲到用liunx操作的时候以下必然要用,所以记录整理一下
关掉服务器所有java程序使用命令 pkill java
查看当前运行java服务 ps -ef | grep java
查看systemclt日志 journalctl -xe
有命令方法带帐号登陆 curl -utomcat:tomcat http://127.0.0.1:8080/manager/status
搜索文件中的内容 grep -R 127\. .
搜索文件 find /path/to/directory -name filename -type f
Tomcat访间日志格式
客户端ip地址 tomcat
用户名 %h
用户名 %l
日期和时间 %d
用户请求的起始行(请求方法和uri) %r
状态码 %S
响应的大小服务端..->客户端) %b
ss 命令 查看套接字,那些进程在联网
[root@ecs-e57e ~]# ss -lntup | grep java
tcp LISTEN 0 1 *:10086 *:* users:(("java",pid=6738,fd=4))
tcp LISTEN 0 1 *:8000 *:* users:(("java",pid=1645,fd=4))
tcp LISTEN 0 100 [::]:9000 [::]:* users:(("java",pid=1645,fd=55))
tcp LISTEN 0 100 [::]:9002 [::]:* users:(("java",pid=6738,fd=55))
tcp LISTEN 0 100 [::]:9003 [::]:* users:(("java",pid=10140,fd=53))
tcp LISTEN 0 100 [::]:9004 [::]:* users:(("java",pid=9203,fd=53))
tcp LISTEN 0 1 [::ffff:127.0.0.1]:10000 [::]:* users:(("java",pid=1645,fd=151))
tcp LISTEN 0 1 [::ffff:127.0.0.1]:10002 [::]:* users:(("java",pid=6738,fd=228))
tcp LISTEN 0 1 [::ffff:127.0.0.1]:10003 [::]:* users:(("java",pid=10140,fd=97))
tcp LISTEN 0 1 [::ffff:127.0.0.1]:10004 [::]:* users:(("java",pid=9203,fd=209))
[root@ecs-e57e ~]#
sed命令,我们在配置tomcat多实例的时候,可以不打开配置文件,直接修改tocmat 配置 参数i 插入修改,以下为示例:
-i 不打文件修改文件内容 sed 's#8080#8081#g' tomcat_yfr/conf.server.xml
以下为网站搜索其它常用方法,来源于scdn
sed -i (-i参数直接修改文件内容)
sed 的[-i]参数可以直接修改文件内容,该功能非常有用!
举例来说,如果有一个100万行的文件,要在第100行加某些文字。此时使用vim可能会疯掉!因为文件太大了打不开!但是通过sed直接修改/取代的功能,根本不需要打开文件就能完成任务。和vim相比sed就像会魔术一样,vim要打开文件-操作文件-关闭文件,sed直接隔空就对文件操作了,非常方便。
正因为sed -i 功能强大,可以直接修改原始文件,也是个危险的动作,需小心使用。
举例说明:
例子1:
$ cat song.txt
I’m a big big girl
In a big big world
It’s not a big big thing if you leave me
But I do do feel
that I do do will miss you much
Miss you much
$ sed -i ‘s\big\small\g’ song.txt (可以看到该文件 song.txt 内所有的 big 被 small 给替换了)
$ cat song.txt
I’m a small small girl
In a small small world
It’s not a small small thing if you leave me
But I do do feel
that I do do will miss you much
Miss you much
例子2:
直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books
sed -i ‘s/book/books/g’ file
全面替换标记g
使用后缀 /g 标记会替换每一行中的所有匹配:
###########################################################################################
https://blog.csdn.net/wh_19910525/article/details/7613090 https://www.linuxprobe.com/linux-sed-command.html
1.简介
sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。
sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。
2.定址
定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。
地址是一个数字,则表示行号;是“$"符号,则表示最后一行。例如:
sed -n’3p’ datafile
只打印第三行
只显示指定行范围的文件内容,例如:
只查看文件的第100行到第200行
sed -n ‘100,200p’ mysql_slow_query.log
地址是逗号分隔的,那么需要处理的地址是这两行之间的范围(包括这两行在内)。范围可以用数字、正则表达式、或二者的组合表示。例如:
sed’2,5d’ datafile
#删除第二到第五行
sed ‘/My/,/You/d’ datafile
#删除包含"My"的行到包含"You"的行之间的行
sed ‘/My/,10d’ datafile
#删除包含"My"的行到第十行的内容
3.命令与选项
sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的输入行。
3.1 sed命令
命令 功能
a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
c\ 用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"“续行
i\ 在当前行之前插入文本。多行时除最后一行外,每行末尾需用”"续行
d 删除行
h 把模式空间里的内容复制到暂存缓冲区
H 把模式空间里的内容追加到暂存缓冲区
g 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
G 把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
l 列出非打印字符
p 打印行
n 读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
q 结束或退出sed
r 从文件中读取输入行
! 对所选行以外的所有行应用命令
s 用一个字符串替换另一个
g 在行内进行全局替换
w 将所选的行写入文件
x 交换暂存缓冲区与模式空间的内容
y 将字符替换为另一字符(不能对正则表达式使用y命令)
(补充:$ sed ‘s/test/mytest/g’ example 在example 所有行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。)
3.2 sed选项
命令格式
sed的命令格式:sed [options] ‘command’ file(s);
sed的脚本格式:sed [options] -f scriptfile file(s);
选项
-e :直接在命令行模式上进行sed动作编辑,此为默认选项;
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
-i :直接修改文件内容;
-n :只打印模式匹配的行;
-r :支持扩展表达式;
-h或–help:显示帮助;
-V或–version:显示版本信息。
4.退出状态
sed不像grep一样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。
5.正则表达式元字符
与grep一样,sed也支持特殊元字符,来进行模式查找、替换。不同的是,sed使用的正则表达式是括在斜杠线"/“之间的模式。
如果要把正则表达式分隔符”/"改为另一个字符,比如o,只要在这个字符前加一个反斜线,在字符后跟上正则表达式,再跟上这个字符即可。例如:sed -n ‘\o^Myop’ datafile
元字符 功能 示例
^ 行首定位符 /^my/ 匹配所有以my开头的行
$ 行尾定位符 /my$/ 匹配所有以my结尾的行
. 匹配除换行符以外的单个字符 /m…y/ 匹配包含字母m,后跟两个任意字符,再跟字母y的行
匹配零个或多个前导字符 /my*/ 匹配包含字母m,后跟零个或多个y字母的行
[] 匹配指定字符组内的任一字符 /[Mm]y/ 匹配包含My或my的行
[^] 匹配不在指定字符组内的任一字符 /[^Mm]y/ 匹配包含y,但y之前的那个字符不是M或m的行
… 保存已匹配的字符 1,20s/youyouself/\1r/ 标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your。
& 保存查找串以便在替换串中引用 s/my/&/ 符号&代表查找串。my将被替换为my
< 词首定位符 /<my/ 匹配包含以my开头的单词的行
> 词尾定位符 /my>/ 匹配包含以my结尾的单词的行
x{m} 连续m个x /9{5}/ 匹配包含连续5个9的行
x{m,} 至少m个x /9{5,}/ 匹配包含至少连续5个9的行
x{m,n} 至少m个,但不超过n个x /9{5,7}/ 匹配包含连续5到7个9的行
6.范例
6.1 p命令
命令p用于显示模式空间的内容。默认情况下,sed把输入行打印在屏幕上,选项-n用于取消默认的打印操作。当选项-n和命令p同时出现时,sed可打印选定的内容。
sed ‘/my/p’ datafile
#默认情况下,sed把所有输入行都打印在标准输出上。如果某行匹配模式my,p命令将把该行另外打印一遍。
sed -n ‘/my/p’ datafile
#选项-n取消sed默认的打印,p命令把匹配模式my的行打印一遍。
定行的范围:逗号
$ sed -n ‘/test/,/check/p’ example 所有在模板test和check所确定的范围内的行都被打印。
$ sed -n ‘5,/^test/p’ example 打印从第五行开始到第一个包含以test开始的行之间的所有行。
$ sed ‘/test/,/check/s/$/sed test/’ example-----对于模板test和west之间的行,每行的末尾用字符串sed test替换。
6.2 d命令
命令d用于删除输入行。sed先将输入行从文件复制到模式空间里,然后对该行执行sed命令,最后将模式空间里的内容显示在屏幕上。如果发出的是命令d,当前模式空间里的输入行会被删除,不被显示。
实例
删除:d命令
$ sed ‘2d’ example-----删除example文件的第二行。
$ sed ‘2,$d’ example-----删除example文件的第二行到末尾所有行。
$ sed ‘$d’ example-----删除example文件的最后一行,其余的都被显示。
$ sed '/test/'d example-----删除example文件所有包含test的行。
sed’/my/d’ datafile
#删除包含my的行,其余的都被显示,注意:d可以在引号里,也也可以在引号外。
sed’/my$/d’ datafile
#删除以my结尾 的行,
sed’/^my/d’ datafile
#删除以my开头 的行,
6.3 s命令
实例
替换:s命令
$ sed ‘s/test/mytest/g’ example 在example 所有行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
$ sed -n ‘s/^test/mytest/p’ example (-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
$ sed ‘s/^192.168.0.1/&localhost/’ example &符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加localhost,变成192.168.0.1localhost。
$ sed ‘s#10#100#g’ example 不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。
sed-n’1,20s/My$/You/gp’ datafile
#取消默认输出,处理1到20行里匹配以My结尾的行,把行内所有的My替换为You,并打印到屏幕上。
6.4 e选项
-e是编辑命令,用于sed执行多个编辑任务的情况下。在下一行开始编辑前,所有的编辑动作将应用到模式缓冲区中的行上。
sed-e’1,3d’-e’s/My/Your/g’ datafile
#选项-e用于进行多重编辑。第一重编辑删除第1-3行。第二重编辑将出现的所有My替换为Your。因为是逐行进行这两项编辑(即这两个命令都在模式空间的当前行上执行),所以编辑命令的顺序会影响结果。
6.5 r命令
r命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上。
sed’/My/r introduce.txt’ datafile
#如果在文件datafile的某一行匹配到模式My,就在该行后读入文件introduce.txt的内容。如果出现My的行不止一行,则在出现My的各行后都读入introduce.txt文件的内容。
6.6 w命令
sed-n’/hrwang/w me.txt’ datafile
6.7 a\ 命令
a\ 命令是追加命令,追加将添加新文本到文件中当前行(即读入模式缓冲区中的行)的后面。所追加的文本行位于sed命令的下方另起一行。如果要追加的内容超过一行,则每一行都必须以反斜线结束,最后一行除外。最后一行将以引号和文件名结束。
sed’/^hrwang/a\
hrwang and mjfan are husband
and wife’ datafile
#如果在datafile文件中发现匹配以hrwang开头的行,则在该行下面追加 如下 两行
hrwang and mjfan are husband
and wife
6.8 i\ 命令
i\ 命令是在当前行的前面插入新的文本。
$ sed '/test/i\
new line’ example
如果test被匹配,则把反斜杠后面的文本newline 插入到匹配行的前面。
6.9 c\ 命令
sed使用该命令将已有文本修改成新的文本。
6.10 n命令
sed使用该命令获取输入文件的下一行,并将其读入到模式缓冲区中,任何sed命令都将应用到匹配行紧接着的下一行上。
sed’/hrwang/{n;s/My/Your/;}’ datafile
注:如果需要使用 多条命令,或者需要 在某个地址范围内嵌套地址,就必须用花括号将命令括起来,每行只写一条命令,或者用分号分割同一行中的多条命令。
6.11 y命令
该命令与UNIX/Linux中的tr命令类似,字符按照一对一的方式从左到右进行转换。例如,y/abc/ABC/将把所有小写的a转换成A,小写的b转换成B,小写的c转换成C。
sed’1,20y/hrwang12/HRWANG^KaTeX parse error: Expected 'EOF', got '#' at position 13: /' datafile #̲将1到20行内,所有的小写hr…。
#正则表达式元字符对y命令不起作用。与s命令的分隔符一样,斜线可以被替换成其它的字符。
6.12 q命令
q命令将导致sed程序退出,不再进行其它的处理。
sed’/hrwang/{s/hrwang/HRWANG/;q;}’ datafile
6.13 h命令和g命令
#cat datafile
My name is hrwang.
Your name is mjfan.
hrwang is mjfan’s husband.
mjfan is hrwang’s wife.
sed-e’/hrwang/h’-e’$G’ datafile
sed -e ‘/hrwang/H’ -e ‘$G’ datafile
#通过上面两条命令,你会发现h会把原来暂存缓冲区的内容清除,只保存最近一次执行h时保存进去的模式空间的内容。而H命令则把每次匹配hrwnag的行都追加保存在暂存缓冲区。
sed -e ‘/hrwang/H’ -e ‘$g’ datafile
sed -e ‘/hrwang/H’ -e ‘$G’ datafile
#通过上面两条命令,你会发现g把暂存缓冲区中的内容替换掉了模式空间中当前行的内容,此处即替换了最后一行。而G命令则把暂存缓冲区的内容追加到了模式空间的当前行后。此处即追加到了末尾。
sed脚本
sed脚本就是写在文件中的一列sed命令。脚本中,要求命令的末尾不能有任何多余的空格或文本。如果在一行中有多个命令,要用分号分隔。执行脚本时,sed先将输入文件中第一行复制到模式缓冲区,然后对其执行脚本中所有的命令。每一行处理完毕后,sed再复制文件中下一行到模式缓冲区,对其执行脚本中所有命令。使用sed脚本时,不再用引号来确保sed命令不被shell解释。
==================================
下一个:n命令
$ sed ‘/test/{ n; s/aa/bb/; }’ example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。
变形:y命令
$ sed ‘1,10y/abcde/ABCDE/’ example-----把1–10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。
退出:q命令
$ sed ‘10q’ example-----打印完第10行后,退出sed。
保持和获取:h命令和G命令
$ sed -e ‘/test/h’ -e '$G example-----在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。
保持和互换:h命令和x命令
$ sed -e ‘/test/h’ -e ‘/check/x’ example -----互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。
liunx 进阶技术的更多相关文章
- Java都有什么进阶技术
Java都有什么进阶技术? 看到有人给题主推荐<代码整洁之道>,评论有人说那不是JAVA进阶的书- 私以为,一些人对JAVA进阶的理解片面了,JAVA不过也是一门语言,提升和进阶还是内 ...
- 史上最全的Java高级技术点,全是Java高级进阶技术,几乎包含了Java后端的所有知识点
史上最全的Java高级技术点,全是Java高级进阶技术,几乎包含了Java后端的所有知识点 1
- 进阶技术:Linux Arm32是如何调用C Main的
前言: Linux x64通过qemu的rdinit方式调用的C Main,实际上是通过load_elf_binary(加载和解析elf)和start_thread(设置Ip和sp),用缺页异常来调用 ...
- Liunx网络技术管理及进程管理
Linux网络技术管理及进程管理(week2_day4) OSI七层模型和TCP/IP四层模型 OSI七层模型:OSI(Open System Interconnection)开放系统互连参考模型 ...
- 【Java架构:进阶技术】——一篇文章搞掂:JVM调优
Sun官方定义的Java技术体系: Java程序设计语言 各种硬件平台上的Java虚拟机 Class文件格式 Java API类库 来自商业机构和开源社区的第三方Java类库 JDK(Java Dev ...
- 【进阶技术】一篇文章搞掂:Spring Cloud Stream
本文总结自官方文档http://cloud.spring.io/spring-cloud-static/spring-cloud-stream/2.1.0.RC3/single/spring-clou ...
- 【进阶技术】一篇文章搞掂:OAuth2
一.第一步 1.什么是OAuth2,为什么应该了解 应用程序请求资源所有者进行认证,并接受tokens来访问这些资源应用程序不是以控制资源的“人”的角度去访问资源,而是用许可证举例,备用钥匙,车主主钥 ...
- Go语言核心36讲(Go语言进阶技术十二)--学习笔记
18 | if语句.for语句和switch语句 现在,让我们暂时走下神坛,回归民间.我今天要讲的if语句.for语句和switch语句都属于 Go 语言的基本流程控制语句.它们的语法看起来很朴素,但 ...
- 技术管理进阶——技术Leader如何拒绝业务方?
原创不易,求分享.求一键三连 前段时间,有个粉丝在群里问了一个问题: 今天对接一个业务团队,要我帮他导数据,这种工作又臭又烦又没成长,而且边界模糊谁做都可以,我很想拒绝他,但又怕引起对方不满,大家有什 ...
- Vim进阶技术:搜索和替换
行内搜索 行内搜索,也就是在当前行内进行搜索和移动,通常都与编辑命令一起使用. fx -- 移动到下一个字符x的位置,光标停留在x字符上面 tx -- 移动到下一个字符x的位置,光标停留在x前一个字符 ...
随机推荐
- QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答
QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索.支持海量数据.跨语种问答 QAnything (Question and Answer based on Anythi ...
- Win32汇编:算数运算指令总结
整理复习汇编语言的知识点,以前在学习<Intel汇编语言程序设计 - 第五版>时没有很认真的整理笔记,主要因为当时是以学习理解为目的没有整理的很详细,这次是我第三次阅读此书,每一次阅读都会 ...
- 《重学Java设计模式》作者开始录视频了!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 1. 前言 哈哈哈,终于对B站下手了! 大家好,我是小傅哥,在紧张.羞涩到适应后,哈哈哈,终于 ...
- Spark源码修改环境搭建
过程中存在问题: maven编译scala工程报错java.lang.NoClassDefFoundError: scala/reflect/internal/Trees,解决方案看maven编译 1 ...
- Xcode的Search Paths配置
在Xcode中的文件搜索路径配置有两个地方,一个是Project层的配置,一个是Target的配置. Project-Build Settings-Search Paths Target-Build ...
- 记录一则exachk进程占用大量CPU资源
有Exadata客户在进行exachk巡检之后反馈,发现系统中,exachk进程占用了大量CPU资源. 了解之前的变更,只是巡检之前升级了AHF,然后进行标准的exachk巡检. 现象: 目前机器整体 ...
- 小知识:杜绝明文密码,OGG的credentialstore特性
之前OGG配置文件中都会明文记录密码,而在OGG12c及以上版本中,有一个特性credentialstore,可以用来杜绝明文密码,提升安全性. 这里测试添加credentialstore并配置数据库 ...
- CF1089K King Kog's Reception 题解
题目传送门 前置知识 线段树 解法 第一眼感觉和 luogu P1083 [NOIP2012 提高组] 借教室 很像.本题同样采用线段树维护,\(sum_{l,r}(1 \le l \le r \le ...
- 源码剖析Spring依赖注入:今天你还不会,你就输了
在之前的讲解中,我乐意将源码拿出来并粘贴在文章中,让大家看一下.然而,我最近意识到这样做不仅会占用很多篇幅,而且实际作用很小,因为大部分人不会花太多时间去阅读源码. 因此,从今天开始,我将采取以下几个 ...
- ARM 中常用的汇编指令解释汇总
前言 嵌入式项目中经常涉及到需要通过分析编译后的汇编文件,来确定异常代码,对一些常用的指令进行了汇总. 一.处理器内部数据传输指令 在ARM架构中,包括Cortex-A7处理器内部,有一些专门用于数据 ...