linux替换文件内容和模板替换实操

linux替换文件内容和模板替换实操

在脚本开发过程中会涉及到一些变量替换或者properties文件中的key对应value的变更
这时候sed ,eval 的价值体现出来了 在这里插入图片描述

sed

对文本指定内容做替换

sed -i "s#需要换的内容#期望的内容#g" 目标文件
#也可以用/做划分  但是需要用到变量的时候还是老实用#  用/目前我发现只能是原样输出$变量  并不会取出变量的值
sed -i "s/需要换的内容/期望的内容/g" 目标文件

#当然你想对变量的值做替换
a="aaa" #想变成 a="ccc"
#!/bin/bash
a="ccc"
sed -i "s#a=.*#a=${a}#g" 目标文件
#这里简单解释下代码 sed -i :直接修改读取的文件内容,而不是输出到终端。
#"s....g" s g相当于正则表达式中的^ $表示起始与结束的位置 #相当于
#a=.* 指的是文件中的变量a以及其赋的值 

这种方式对于少量修改还是相对便利,当需要修改的内容很多的时候显得很蠢在这里插入图片描述
所以寻找新的方法采用eval

sed其他参数自行研究哈哈

选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 1020 行之间进行的,则『 10,20[动作行为] 』

function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

eval(当目标文件中有变量取值类似 a . b . c 时可能会报错模板替换本身就是对目标文件的占位符 {a.b.c}时可能会报错 模板替换本身就是对目标文件的占位符 a.b.c时可能会报错模板替换本身就是对目标文件的占位符{}做替换 当有变量是a.b.c这种bash不认识的变量时就会报错)

例如:需要对几个.properties中的变量做修改
文件file.properties
a=“aaaa”
b=“bbbb”
c=“ccc”

#首先copy一个原文件副本 并修改内容
a=$a
b=$b
c=$c
....
#写一个模板替换脚本
#!/bin/bash
a="a"
b="b"
c="c"
....
#开始替换
eval "cat <<EOF

$(< file.properties)

EOF
" > file.properties

fi

最后查看原文件与副本文件是否做修改
这边简单解释下关键代码

eval会对内容进行两次扫描,第一次做变量替换第二次执行命令cat 内容(这里当做文件处理了所以能cat) > file.properties
<<EOF
EOF
必须是回车键否则不能识别  表示多行输入
$(<file.properties) 相当于$(cat 文件)
$(xxx) 表示执行命令,和两个反引号的效果相同,会执行里面的命令 才会读取文件内容

xargs
ps -ef | grep $i | grep -v grep |awk ‘{print $2}’ | xargs kill
linux的命令中很多的命令的设计是先从命令行参数中获取参数,然后从标准输入中读取,xargs命令可以通过管道接受字符串,并将接收到的字符串通过空格分割成许多参数(默认情况下是通过空格分割) 然后将参数传递给其后面的命令,作为后面命令的命令行参数;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值