我在哪里,我需要更改文件的内容说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脚本?
我在哪里,我需要更改文件的内容说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脚本?
如何是这样的:
#!/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
这给你的基本结构,但是你将要考虑输入验证等。
*
#! /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
*
我希望这将是一个更容易理解,适合初学者
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(同样在须藤的例子)的捕获括号
sed -i "s/$name/$new_name/g" address.txt
该命令也可以被用于修改该数据。