shell中修改文件內容


sed命令

定位

定位有兩種匹配方式,第一種根據某行開頭內容進行匹配;第二種根據關鍵字進行匹配。

第一種: sed -n '/^bbbb/=' file  #在file文件中匹配所有以bbbb為開頭的行

第二種: sed -n '/bbbb/=' file  #在file文件中匹配所有含有bbbb關鍵字的行

刪除

刪除也是兩種方式刪除,第一種是根據行號刪除;第二種是根據關鍵字刪除。

第一種:sed -i '5d' file  #刪除第5行

sed -i '5,10d' file  #刪除第5到第10行

第二種: sed -i '/aaa/'d file  #刪除所有包含‘aaa’的行

替換

形式為:sed -i 's/被替換的內容/要替換成的內容/' file

ex:sed -i 's/aaa/bbb/g' file  #把file中所有的aaa字符串替換成bbb字符串

寫入

寫入也有兩種方式,第一種是把某文件寫入到當前文件中;第二種是把某字符串寫入當前文件中。

第一種:sed -i '10 r file2' file1  #在file1中的第10行插入file2

sed -i '/regex/ r file2' file1  #在file1中的匹配regex正則表達式所在行,然后插入file2

第二種:sed -i  “5a ccc ” file  #“5a”表示在第5行之后添加,“ccc”表示要添加的內容,若想在第5行之前添加內容可以把“a”換成“i”

 

變量

自增

在bash文件中,變量a的自增這么表示((a++))

加減運算

Shell 的所有變量默認都是字符型,所以直接運算只是字符串拼接,運算主要用到了expr,格式為 expr 變量 +/-/*// 數字

a=0

number=`expr $a + 1`

echo number

1

注意:

'+ -'
     加減運算。兩端參數會轉換為整數,如果轉換失敗則報錯。
 
'* / %'
     乘,除,取模運算。兩端參數會轉換為整數,如果轉換失敗則報錯。

 

eval變量嵌套替換

在bash文件中,若想讓多個變量組合形成一個新變量直接把變量拼接起來是行不通的,需要用到eval命令才能讓變量組合形成新變量。

ex:

file1=file.txt

a='file'

b='1'

c1=$a$b

c2='$'$a$b

eval d='$'$a$b

echo c1;c2;d

file1;$file1;file.txt    #通過結果可以看到,c2雖然輸出的$file1,但是它是以字符串形式輸出的,並不能輸出變量file1的值,而通過eval定義的變量d,通過拼接字符串可以獲取到變量file1的值。

 

字符串的分割截取

${#parameter}    #這種可以獲得字符串的長度。

${parameter%} 最小限度從后面截取word
${parameter%%word} 最大限度從后面截取word
${parameter#word} 最小限度從前面截取word
${parameter##word} 最大限度從前面截取word

ex: a=“file1:file2:file3”

${a%:*}    #刪除從右到左第一個:后的內容,輸出結果為“file1:file2”

${a%%:*}   #刪除從右到左最后一個:后的內容,輸出結果為“file1”

${a#*:}     #刪除從左到右第一個:前的內容,輸出結果為“file2:file3”

${a##*:}    #刪除從左到右最后一個:前的內容,輸出結果為“file3”

 

if語句

格式

if [ 條件表達式 ]; then

指令一

else

指令二

fi

常用選項

-eq       等於,如:if [ "$a" -eq "$b" ]
-ne       不等於,如:if [ "$a" -ne "$b" ]
-gt       大於,如:if [ "$a" -gt "$b" ]
-ge       大於等於,如:if [ "$a" -ge "$b" ]
-lt       小於,如:if [ "$a" -lt "$b" ]
-le       小於等於,如:if [ "$a" -le "$b" ]
<       小於(需要雙括號),如:(("$a" < "$b"))
<=       小於等於(需要雙括號),如:(("$a" <= "$b"))
>       大於(需要雙括號),如:(("$a" > "$b"))
>=       大於等於(需要雙括號),如:(("$a" >= "$b"))
此處因為用到的不是很多,所以要想查看更多的關於if的命令可以看這篇文章:https://blog.csdn.net/xushiyu1996818/article/details/84545103 

需要注意的是,條件表達式左右兩側都要右空格。

 

shell中創建序列(list)

list元素之間用空格來分割,存儲時也要注意每存儲完一個元素要添加空格來分割元素,可以使用for..in..取值,也可以根據索引來取值。

numlist=${seq 10}    #現在我們得到了一個從1到10的list,

echo ${numlist[0]}    #獲取numlist中索引為0的元素

1

echo ${#numlist[*]}"    #獲取numlist的長度

10

函數

創建

 定義函數有兩種方式

第一種:function_name (){ command }

第二種:function function_name (){ command }

調用

調用時直接用 函數名稱  參數1 參數2 。。。。。。

ex: function add_number (){

 num=`expr $1 + $2`

return num

}

add_number 2 3

echo $?

5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM