shell的sed指令

shell的sed

    shell通常用來自動化處理軟件的安裝和配置,shell操做軟件的配置,通常就用sed命令來處理。java

一、sed介紹

    sed編譯器能夠逐行處理文件,並將結果發送到屏幕。咱們能夠用來修改文件。這就讓咱們很方便的在shell腳本中修改文件,特別是一些配置命令
    sed在處理文本文件的時候,會在內存上建立一個模式空間,而後把這個文件的每一行調入空間使用響應的命令處理,處理完在輸出,接着處理下一行。通常的修改,都在模式空間中執行,若是咱們不使用 -i,則配置文件不會變壞
node

二、命令使用

    a、命令         mysql

  sed [選項][定址命令][inputfile]


    b、 其中option   linux

-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、地址選擇redis

行號、正則
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的行

三、配置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

四、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"

五、定時腳本

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
相關文章
相關標籤/搜索