shell的sed指令

shell的sed

    shell一般用来自动化处理软件的安装和配置,shell操作软件的配置,一般就用sed命令来处理。

1、sed介绍

    sed编译器可以逐行处理文件,并将结果发送到屏幕。我们可以用来修改文件。这就让我们很方便的在shell脚本中修改文件,特别是一些配置命令
    sed在处理文本文件的时候,会在内存上创建一个模式空间,然后把这个文件的每一行调入空间使用响应的命令处理,处理完在输出,接着处理下一行。一般的修改,都在模式空间中执行,如果我们不使用 -i,则配置文件不会变坏

2、命令使用

    a、命令         

  sed [选项][定址命令][inputfile]


    b、 其中option   

-e:进行多项编辑,即对输入行应用多条sed命令时使用   
-n:取消默认的输出,和`/p`用来输出修改的内容
-f:指定sed脚本的文件名,这里将sed写在一个文件中,然后操作
-i:直接修改文件的内容,不会输出到屏幕

    c、定址命令

a\  :新增,在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行

c\  :取代。取代定位行之间的内容

i\  :插入,在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行

d   :删除行

s   :行内取代,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。例如 1,20s/old/new/g,将1-20行的old替换为new

 ps:
1.定址的作用,就是选取文件中需要修改的位置,这个位置可以是行标,也可以是正则匹配的行内字符串 
2.上面添加"\",会在匹配的每一行都进行操作。
3.a和i的区别是,a将字符串放在下行,i将字符串放在上一行

    c、地址选择

行号、正则
n            n为一行号,比如1
n,m          表示行号范围从n到m,如2,5表示从第2行到第5行
/pattern/    查询包含模式的行,如/disk/或/[a-z]/
/pattern/pattern/   查询包含两个模式的行,如/disk/disks/
/pattern/,x  在给定行号上查询包含模式的行,如/disk/,3
n,/pattern/  通过行号和模式查询匹配行,如 3,/disk/
n,m!         查询不包含指定行号n和m的行

特殊正则
^ :锚定行的开始 如:/^sed/匹配所有以sed开头的行。

$ :锚定行的结束 如:/sed$/匹配所有以sed结尾的行。

. :匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。

* :匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

[] :匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。

[^] :匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

/(../) :保存匹配的字符,如s//(love/)able//1rs,loveable被替换成lovers。

& :保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。

/< :锚定单词的开始,如://

/> :锚定单词的结束,如/love/>/匹配包含以love结尾的单词的行。

x/{m/} :重复字符x,m次,如:/0/{5/}/匹配包含5个o的行。

x/{m,/} :重复字符x,至少m次,如:/o/{5,/}/匹配至少有5个o的行。

x/{m,n/} :重复字符x,至少m次,不多于n次,如:/o/{5,10/}/匹配5--10个o的行

3、配置jdk环境

#!/bin/bash

#1.remove openjdk if exists
echo "---->begin to intall jdk "
echo "---->first:remove openjdk "
for i in $(rpm -qa | grep jdk | grep -v grep)
do
	echo "Deleting rpm -> "$i
	rpm -e --nodeps $i
done

if [[ ! -z `rpm -qa | grep jdk | grep -v grep ` ]]
then
	echo "-->Failed to remove the defult jdk"
	exit
else
	echo "-->tar jdk to /usr/local/18091"
	tar -zxvf ./jdk-8u91-linux-x64.gz
	echo "-->mv jdk  to /usr/local"
	TARGET=`ls | grep jdk1` 
	mv ${TARGET} /usr/local/jdk18091 
	
	if [[ -z ` ls /usr/local/jdk18091 `  ]]
	then
		echo "-->jdk is not mv to /usr/local "
		exit
	else
		echo "-->config the path"
		cp /etc/profile /etc/profile.jdk.bak 
		echo 'JAVA_HOME=/usr/local/jdk18091' >> /etc/profile 
		echo 'CLASSPATH=.:$JAVA_HOME/lib/tools.jar' >>/etc/profile 
		echo 'PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile 
		echo 'export JAVA_HOME CLASSPATH PATH' >>/etc/profile 
		source /etc/profile
	fi
fi

echo "-->test jdk has installed"
java -version
if [[  $? -ne 0  ]]
then 
	echo "-->java install failed"
else
	echo "-->java install success"
	echo "-->java -version:\n"
	java -version
	echo "-->javac -version\n"
	javac -version
fi

4、redis的安装和启动

#! /bin/bash

echo "begin to install redis ..."
echo "step 0"
echo "---> move redis to /usr/local"
FILENAME=`ls | grep *.gz `
if [[ -f ${FILENAME}   ]]
then 
	cp ${FILENAME} /usr/local/
else
	echo "there is no redis zip ,please updown"
	exit
fi

if [[ $? -eq 0  ]]
then 
	echo "step1:"
	echo "---> unzip redis "
else
	echo "move redis fail"
	exit
fi

cd /usr/local
tar -zxvf ${FILENAME}

if [[ $? -eq 0 ]]
then 
	echo "step 2: "
	echo "--->rm redis zip "
else
	echo "unzip redis fail"
	exit
fi


sleep 5 &&rm -f ${FILENAME} && TARGETNAME=`ls | grep redis`&& test -d ${TARGETNAME} && mv ${TARGETNAME} redis
if [[ $? -eq 0 ]]
then
	echo "step 3:"
	echo "--->install and config redis "
else
	echo "rm redis fail"
	exit
fi


sleep 5 &&cd redis && 
sed -i 's/^daemonize no/daemonize yes/g' /usr/local/redis/redis.conf && sed -i 's/^port 6379/port 6380/g' /usr/local/redis/redis.conf && sed -i 's/^appendonly no/appendonly yes/g' /usr/local/redis/redis.conf && make 




if [[ $? -eq 0  ]]
then 
	echo "install success"
	echo "step 4:"
	echo "--->start redis"
else
	echo "config fail"
	exit
fi

sleep 5 &&./src/redis-server redis.conf &&RESULT=`netstat -antp | grep redis | wc -l `&&test ${RESULT} -eq 1&&echo "redis start success"

5、定时脚本

1.使用特定用户打开crontab编译器

#crontab -e -u mysql

2.设置用户的任务
 
*/1  *   *   *   *    /bin/bash /home/mysql/test.sh

分钟 小时 天  月  星期  命令
ps:这里的命令是通过/bin/sh 来执行/home/mysql/test.sh的脚本


3.启动

service crond start

4.查看

crontab -l

 

转载于:https://my.oschina.net/u/2246410/blog/680003

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值