GNU sed

Linux下的shell编程(基础)

冷暖自知 提交于 2020-08-05 09:08:38
一. Shell介绍 : shell是一个命令行解释器,脚本语言,活动在应用程序与内核之间,用于接收应用程序(用户)命令,调用操作系统内核。 (1 )编译型语言: 程序在执行之前需要个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依养编译器,跨平台性差些。如C、C++、java (2 )解释型语言: 程序不需要编译,程序在运行时由解释器翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。比如Python/javaScript/Shell等都是解释型语言。 二、Shell解析器 (1) Linux提供的Shell解析器有: [root@Linux01 home]# cat /etc/shells /bin/sh 是bash的一个快捷方式 /bin/bash bash是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能 /sbin/nologin 表示非交互,不能登录操作系统 /bin/dash 小巧,高效,功能相比少一些 /bin/tcsh 具有C语言风格的一种shell,具有许多特性,但是也有一些缺陷 /bin/csh 是csh的增强版本,完全兼容csh (2) bash和sh的关系: [root@Linux01 bin]# ll | grep bash -rwxr-xr-x. 1 root

jenkins添加脚本待程序启动成功才退出构建

烂漫一生 提交于 2020-08-05 08:34:13
需求 jenkins在构建完后,会将去执行远程服务器上面的脚本,希望jenkins中能够打印脚本执行和程序启动的日志。同时当发现日志中包含启动成功标记的时候,标记jenkins构建成功,否则超过一定时间还没有出现成功标记,则构建失败。 示例 代码启动成功时候会在日志文件中输出: [] 2020-06-24 03:24:41 INFO com.gongstring.config.AfterStartRunner [39][main] - ============== Start plugins now ============== [] 2020-06-24 03:24:41 INFO com.gongstring.config.AfterStartRunner [55][main] - ========== gongstring-user.service Running Now ========== 其中 Running Now 关键字出现的时候,说明启动成功。 在jenkins对应的shell脚本中添加如下脚本 keywords="Running Now" logfile="/logs/gongstring.user/out.log" { sed /"$keywords"/q; kill $!; } < <(exec timeout 2m tail -Fn 0 $logfile)

Linux中一些 Sed命令技巧介绍

a 夏天 提交于 2020-08-05 00:51:08
sed 命令 应用广泛,使用简单,是快速文本处理的利器。它其实没多少技巧,背诵、使用是最合适的学习渠道,属于硬技能。但它又很复杂,因为高级功能太多。本篇不去关注sed的高级功能,仅对常用的一些操作,进行说明。 随着使用,你会发现它和vim的一些理念是想通的,正则表达式的语法也基本上一样,并没有多少学习成本。从个人视野和工作效率上来看,sed 命令 都是程序员必须掌握的一个重要工具。 那些说可以现场 google 用法的,大多习惯将文本拷贝到 excel 里,慢慢磨洋工,遇到大批量文件更是手忙脚乱。不是一家人不进一家门,本文不是为你写的。 一个简单的入门 如图,一个简单的 sed 命令包含三个主要部分:参数、范围、操作。要操作的文件,可以直接挂在命令行的最后。除了命令行,sed也可以通过-f参数指定一个 sed 脚本 ,这个属于高级用法,不做过多描述。 有些示例命令我会重复多次,聪明如你一定能发现其中规律,有时连解释都用不着。 参数 -n 这个参数是--quiet或者--silent的意思。表明忽略执行过程的输出,只输出我们的结果即可。 我们常用的还有另外一个参数 :-i。 使用此参数后,所有改动将在原文件上执行。你的输出将覆盖原文件。非常危险,一定要注意。 范围 1,4 表示找到文件中1,2,3,4行的内容。 这个范围的指定很有灵性,请看以下示例(请自行替换图中的范围部分)。 5

如何强制Docker进行映像的干净构建

冷暖自知 提交于 2020-08-04 17:39:21
问题: I have build a Docker image from a Docker file using the below command. 我已经使用以下命令从Docker文件构建了一个Docker映像。 $ docker build -t u12_core -f u12_core . When I am trying to rebuild it with the same command, it's using the build cache like: 当我尝试使用同一命令重建它时,它正在使用构建缓存,例如: Step 1 : FROM ubuntu:12.04 ---> eb965dfb09d2 Step 2 : MAINTAINER Pavan Gupta <pavan.gupta@gmail.com> ---> Using cache ---> 4354ccf9dcd8 Step 3 : RUN apt-get update ---> Using cache ---> bcbca2fcf204 Step 4 : RUN apt-get install -y openjdk-7-jdk ---> Using cache ---> 103f1a261d44 Step 5 : RUN apt-get install -y openssh-server --->

SHELL正则表达式

拈花ヽ惹草 提交于 2020-08-04 12:59:08
简介 正则表达式其主要作用是通过一些拥有特殊含义得字符 完成日常工作中我们需要得特定字符串匹配,或者从输出内容中匹配出符合我们需要得内容。 分类 基础正则表达式 扩展正则表达式 基础正则表达式 正则表达式 简述 是否支持 \ 转义字符 支持 ^ 以指定字符开头 支持 $ 以指定字符结尾 支持 \> 词尾锚定 支持 . 任意单个字符 支持 * 匹配前面的字符0任意次 支持 [] 匹配[]中的任意一个字符 支持 [-] 范围匹配 支持 ? 匹配前面字符0次或一次 不支持 + 匹配 前面的字符一次或多次 不支持 () 匹配字符串 不支持 {n} 匹配前面的单词或字符串n次 不支持 {m,} 匹配前面的单词或字符串最少m次 不支持 {,n} 匹配前面的单词或字符串最多m次 不支持 {m,n} 匹配前面的单词或字符串最少n次最多m次 不支持 I 匹配号两边任意一项 不支持 注意:如上基础扩展正则表达式中不支持的表达式,除Command本身就可以通过特定参数 开启扩展支持的选项外,还可以通过转义字符完成支持,请参考如下几个实例 案例演示: 1丶即可通过转义符完成本不支持基础的正则予以支持 grep 'ro{2,}' /etc/passwd 2丶grep&sed默认开启扩展的选项演示如下 egrep 'ro{2,}' /etc/passwd grep -E 'ro{2,}' /etc

rsync+sersync

假如想象 提交于 2020-07-29 06:41:50
rsync是 linux系统 下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步 sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录 实验环境 centos6.5_x64 192.168.10.18 rsync+sersync rsync1 192.168.10.15 rsync rsync2 实验软件 sersync2.5.4_64bit_binary_stable_final.tar.gz 软件安装 cp -pv /etc/hosts /etc/hosts.bak echo 192.168.10.18 rsync1 >> /etc/hosts echo 192.168.10.15 rsync2 >> /etc/hosts sed -i.bak 's/centos6/rsync1/g' /etc/sysconfig/network rsync -avz /etc/hosts root@192.168.10.15:/etc/hosts rsync -avz /etc/sysconfig/network root@192.168.10.15:/etc/sysconfig/network

收集FreeBSD 磁盘实时IO数据脚本

江枫思渺然 提交于 2020-07-29 04:53:41
脚本内容: #!/usr/local/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin cd /tmp touch IOPS.sh echo '#!/usr/local/bin/bash' >>IOPS.sh echo 'PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin' >>IOPS.sh echo "date | awk '{print \$4}' >>/tmp/io.txt" >>IOPS.sh echo 'iostat -x | sed -n '2,3p' >>/tmp/io.txt' >>IOPS.sh chmod a+x IOPS.sh echo '* * * * * /tmp/IOPS.sh' >>/var/cron/tabs/root 来源: oschina 链接: https://my.oschina.net/u/4408067/blog/4293926

Linux下批量修改文件名方法

∥☆過路亽.° 提交于 2020-07-29 02:29:14
对于在Linux中修改文件名的方式一般我们会用mv命令进行修改,但是mv命令是无法处理大量文件修改名称。 但是在处理大量文件的时候该如何进行批量修改呢? 方法一:mv配合for循环方式进行修改 [root@show day74]# for name in `ls *.html`; do echo $name ${name% .html}.jpg;done 00 .html 00 .jpg 01 .html 01 .jpg 02 .html 02 .jpg 03 .html 03 .jpg 04 .html 04 .jpg 05 .html 05 .jpg 06 .html 06 .jpg 07 .html 07 .jpg 08 .html 08 .jpg 09 .html 09 .jpg 10 .html 10 .jpg [root@show day74]# for name in `ls *.html`; do mv $name ${name% .html}.jpg;done [root@show day74]# ls 00 .jpg 01 .jpg 02 .jpg 03 .jpg 04 .jpg 05 .jpg 06 .jpg 07 .jpg 08 .jpg 09 .jpg 10 .jpg 方法二:sed命令 ls *jpg|sed -r ' s#(.*).jpg#mv &

django_simpleui docker镜像

风格不统一 提交于 2020-07-28 19:54:03
一、目录结构: pip.conf文件: [global] index-url = https://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com requirements.txt文件: Django== 2.2.2 django-simpleui== 4.0.3 PyMySQL== 0.9.3 xlrd== 1.2.0 XlsxWriter== 1.1.8 xlwt== 1.3.0 uWSGI== 2.0.18 uwsgitop== 0.1 Dockerfile文件: FROM ubuntu: 18.04 # 基础镜像 MAINTAINER yangjianliang < 526861348@qq.com > # 作者 RUN sed -i s@ /archive.ubuntu.com /@ /mirrors.aliyun.com /@g /etc /apt /sources.list # 设置apt源为阿里云源 RUN apt-get clean && \ apt-get update && \ apt-get upgrade -y # 检查软件包并升级 RUN apt-get update && \ apt-get install -y \ python3 && \ apt

awk && sed

可紊 提交于 2020-07-28 18:20:22
awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd 将/etc/passwd文件按照":"分隔,输出第1、3、6列并用制表符分开显示 awk -F: '{print $1; print $2}' /etc/passwd 按":"分隔后输出第1、2列,并且每行显示一列 awk -F":" '{print $1}' /etc/passwd 按":"分隔后输出第一列 awk正则 来源: oschina 链接: https://my.oschina.net/u/4334316/blog/4328444