shell中修改文件内容

Posted waitsani

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于shell中修改文件内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在shell脚本中修改添加替换指定文件中的内容

shell法宝之sed,修改文件内容的好帮手

201555332盛照宗—网络对抗实验1—逆向与bof基础

shell选取部分内容

求助shell脚本修改xml的值

shell中修改文件内容