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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在shell脚本中修改添加替换指定文件中的内容相关的知识,希望对你有一定的参考价值。

我有时候要经常修改网络配置我想写一个脚本自动修改
把DHCP修改成手动网络
这里是手动配置

DEVICE=eth1
TYPE=Ethernet
UUID=c1ad2174-860b-464d-beba-1433b1988cdb
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
HWADDR=08:00:27:2A:32:90
IPADDR=10.0.0.10
PREFIX=24
GATEWAY=10.0.0.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth1"
这里是自动配置
DEVICE=eth1
TYPE=Ethernet
UUID=c1ad2174-860b-464d-beba-1433b1988cdb
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth1"
HWADDR=08:00:27:2A:32:90
PEERDNS=yes
PEERROUTES=yes
LAST_CONNECT=1419610509
系统默认是dhcp 请问一下这个脚本改如何写呢,

1、启动Linux系统,用ssh工具连上Linux系统。

2、bash自带了一些调试选项。

3、在脚本启动时添加调试选项。来调试debug.sh。

4、在脚本内添加调试选项,使用set 命令。

5、现在要看debug.sh脚本执行的调试信息,就不需要使用bash -x  ./debug.sh执行了。

6、在脚本开头添加-xv选项。

7、同样现在执行./debug.sh,也可打印出调试信息。

注意事项:

shell脚本在计算机科学中,是指“为使用者提供操作界面”的软件(命令解析器)。类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

参考技术A

1、可以借助于shell命令执行另一个脚本文件或者用变量保存。比如a.sh和b.sh,a.sh中调用b.sh的代码,一起输出"hello world"的字符串。b.sh的代码如下echo " world!"。

2、a.sh可以借助"."来执行b.sh脚本,b.sh执行结果可以保存在变量中,也可直接输出,a.sh中的内容如下:echo "可以用.命令来执行脚本文件"echo "hello `./b.sh`"var=`./b.sh`echo"hello $var";。

3、a.sh也可以借助source命令执行b.sh脚本,b.sh执行结果可以保存在变量中,也可直接输出。a.sh中的内容如下:echo "用source命令执行脚本文件"echo "hello `source ./b.sh`"var=`source ./b.sh`echo "hello $var"。

4、a.sh中也可以借助于bash、sh等命令来执行b.sh脚本,b.sh的执行结果可以保存在变量中,也可以直接输出。a.sh中的内容如下。

5、另外,也可以使用$(),将b.sh的执行结果的内容保存到变量中,就完成了。

参考技术B 用sed 替换
比如替换‘BOOTPROTO=none' 这一行可以用这个命令:
sed -i -e 's|BOOTPROTO=none|BOOTPROTO=dhcp|' conf.txt
其他行同理追问

我试试!可以的话立马采用 其中的-i -e 和s是什么意思呢

追答

-i 是直接修改文件文件名可以放到命令最后
-e ’s|aaa|bbb|' 把aaa替换成bbb

本回答被提问者和网友采纳
参考技术C -e 是多命令编辑参数,当你想用一条sed命令对一个文件内容进行多种操作时使用的,比如sed -i -e 's|BOOTPROTO=none|BOOTPROTO=dhcp|' -e 's|username=none|username=dhcp|' conf.txt

此处不加-e选项也是可以的。因为只有一个替换操作指令。s是替换的意思,和vi里的编译命令s/old/new/g很像。

shell 往一个文件中添加内容

在一个文件夹A中有脚本a.sh 首先需要判断lsmod grep in 这个出来的结果中 是否含有mm
in 234 ko,mn(也就是使用lsmod 查询过滤 出in的驱动 然后判断是否有mm这个驱动在使用它)如果没有则在运行这个脚本的时候往B文件夹下b文件中添加“expot ss” 但是需要判断b文件中是否有这么一行的内容,如果有则删除 重新添加 没有则添加到结尾
实在不会写 求助!!

string="export ss"
oFile=B/b #B文件夹位置在哪里?如果跟A目录同级,那么就是改为../B/b
result=`lsmod | awk '/in/&&/mm/'`
[ -z "$result" ] && sed -i "/$string/d" $oFile && echo "$string" >>$oFile

参考技术A [[ `lsmod | grep "in.*mm"` ]] || (sed -i "/^expot ss$/d" B/b; echo "expot ss" >> B/b )

以上是关于如何在shell脚本中修改添加替换指定文件中的内容的主要内容,如果未能解决你的问题,请参考以下文章

shell 如何取本本文件中 指定两个字符中间的内容呢?

Python脚本批量给文件添加内容

shell脚本命令如何 读取文本指定位置内容 写入另一文本指定位置并替换原内容

shell 往一个文件中添加内容

shell脚本替换A、B两个文件里面的内容

shell脚本里怎么替换掉某个文件的最后一行的最后一个字符