通过shell脚本更改文件的内容(Changing contents of a file throu

2019-08-16 16:11发布

我在哪里,我需要更改文件的内容说xyz.cfg的要求。 该文件包含类似的值:

group address=127.8.8.8
port=7845
Jboss username=xyz_ITR3

我想,当通过shell脚本没有需要改变这个内容并保存文件。 更改的内容可以关注一下:

group address=127.8.7.7  
port=7822
Jboss username=xyz_ITR4

我如何能实现通过利用用户输入或以其它方式使用这个shell脚本?

Answer 1:

如何是这样的:

#!/bin/bash

addr=$1
port=$2
user=$3

sed -i -e "s/\(address=\).*/\1$1/" \
-e "s/\(port=\).*/\1$2/" \
-e "s/\(username=\).*/\1$3/" xyz.cfg

$1,$2$3是传递给脚本的参数。 保存文件如script.sh ,并确保它可执行文件chmod +x script.sh那么你就可以运行它,如:

$ ./script.sh 127.8.7.7 7822 xyz_ITR4

$ cat xyz.cfg
group address=127.8.7.7
port=7822
Jboss username=xyz_ITR4

这给你的基本结构,但是你将要考虑输入验证等。



Answer 2:

*

#! /bin/sh
file=xyz.cfg
addr=$1
port=$2
username=$3
sed -i 's/address=.*/address='$addr'/' $file
sed -i 's/port=.*/port='$port'/' $file
sed -i 's/username=.*/username='$username'/' $file

*

我希望这将是一个更容易理解,适合初学者



Answer 3:

sed -i 's/something/other/g' filename.txt 

将编辑就地FILENAME.TXT和改字“东西”到“其他”

我认为-i可能是一个GNU扩展,虽然,但如果这对你行,你可以通过查找,xargs的等添加它

如果你想改变它在一个shell脚本,您可以在命令行参数,并通过数字引用它们,例如:$ 1

编辑:

按我的意见,sudo_O的回答下面正是你想要的例子。 我会补充的是,这是常见的,你会想要做这样的匹配有多个文件,跨越的子目录等,因此了解发现/ xargs的,你可以将二者结合起来。 一个简单的例子说,在一堆.cfg的文件可能会改变子网:

find -name '*.cfg' -print0 | xargs -0 -I {} sed -ie 's/\(192.168\)\.1/\1\.7/' {}

注意-print0 / -0参数传递给查找/ xargs的(用空格的路径/文件名非常有用),并且您有逃避,因为shell(同样在须藤的例子)的捕获括号



Answer 4:

sed -i "s/$name/$new_name/g" address.txt

该命令也可以被用于修改该数据。



文章来源: Changing contents of a file through shell script
标签: linux bash shell