替换bash中的文本

时间:2012-04-17 20:58:42

标签: bash command-line ssh

我有一个配置文件我想通过ssh编辑,需要一个智能命令(或​​命令)来替换它中的一些文本。文件是这样的:

[vol1]
path = /folder
allowed = 10.10.10.1
public=yes

我需要修改允许的部分,正好添加一些IP的空白分隔符,如下所示:

[vol1]
path = /folder
allowed = 10.10.10.1 10.10.10.9
public=yes

尝试使用 sed bash函数,但我无法按照我的意愿使其工作,就像我认为它是小菜一碟一样。 只是另一个信息,在配置文件中有很多这样的文本块。 IP地址不是来自sam池,派生或类似于(可能非常不同)并且已经检查了IP地址格式,因此不需要这样做。 我的信息是,我必须在[vol1]开头的chunk中附加给定地址,正好在该块的允许部分中。 我希望我听起来很清楚。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

ssh user@host sed -i '/allowed =/s/$/ 10.10.10.9/' /path/to/file

答案 1 :(得分:2)

sed中执行此操作应该可以解决问题:

cat /path/to/file.txt | sed 's/10.10.10.1/& &/g'

匹配任何IP:

cat /path/to/file.txt | sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/& &/g'

如果要更改分隔符,只需编辑sed命令的右操作数,并添加所需的分隔符。例如,使用选项卡:

cat /path/to/file.txt | sed 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/&\t&/g'

答案 2 :(得分:2)

您也可以使用编辑器:

 echo -e "/10.10.10.1\ns/\$/ 10.10.10.9\nx\n" | ex file_to_change