通过shell脚本更改文件的内容

use*_*888 11 linux bash shell

我有一个要求,我需要更改文件的内容,如xyz.cfg.该文件包含如下值:

group address=127.8.8.8
port=7845
Jboss username=xyz_ITR3
Run Code Online (Sandbox Code Playgroud)

我想在需要时通过shell脚本更改此内容并保存文件.更改的内容可能如下所示:

group address=127.8.7.7  
port=7822
Jboss username=xyz_ITR4
Run Code Online (Sandbox Code Playgroud)

如何通过使用用户输入或其他方式使用shell脚本实现此目的?

Chr*_*our 28

怎么样的:

#!/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
Run Code Online (Sandbox Code Playgroud)

$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
Run Code Online (Sandbox Code Playgroud)

这为您提供了基本结构,但您可能需要考虑验证输入等.

  • 这完全符合我的需要!谢谢 (2认同)

小智 10

*

#! /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
Run Code Online (Sandbox Code Playgroud)

*

我希望这对初学者来说更容易理解


her*_*ats 9

sed -i 's/something/other/g' filename.txt 
Run Code Online (Sandbox Code Playgroud)

将就地编辑filename.txt,并将单词'something'更改为'other'

我认为-i可能是一个GNU扩展,但如果你可以,你可以通过find,xargs等添加它.

如果您想在shell脚本中更改它,可以在命令行中获取参数并按编号引用它们,例如$ 1

编辑:

根据我的评论,下面的sudo_O答案就是你想要的例子.我将添加的是,您通常希望与多个文件进行此类匹配,跨越子目录等,因此了解find/xargs,您可以将两者结合起来.一个简单的例子就是说改变一堆.cfg文件中的子网可能是:

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

注意-print0/-0 args来查找/ xargs(对于带有空格的路径/文件名非常有用),并且你必须因为shell而逃避捕获括号(在sudo的例子中也是如此)