使用sed修改文件

时间:2018-08-18 23:59:09

标签: linux bash awk sed

我有这种格式的文件

[file1]
username = admin
password = *****
ips = X.X.X.X
port = 8000

[file2]
username = admin
password = *****
ips = X.X.X.X
port = 8000

我想使用bash脚本修改文件中两个部分的用户名和密码。

我需要的输出是:

[file1]
username = user1
password = user1
ips = X.X.X.X
port = 8000

[file2]
username = user2
password = user2
ips = X.X.X.X
port = 8000

这是我尝试过的sed命令:

sed 's/username = admin/username = user1/' file [file1] username = user1 password = ***** ips = X.X.X.X port = 8000 [file2] username = user1 password = ***** ips = X.X.X.X port = 8000

我正在尝试使用sed命令来实现此目的,但是它会找到并替换所有具有相同值的用户名和密码。谁能帮我解决这个问题?

sed 's/username = admin/username = user1/' x
[file1]
username = user1
password = *****
ips = X.X.X.X
port = 8000

[file2]
username = user1
password = *****
ips = X.X.X.X
port = 8000

提前感谢您的帮助!

-W

1 个答案:

答案 0 :(得分:1)

请您尝试以下。

解决方案第一: :从行中的file字符串中提取数字,然后将其添加到userpassword字符串中行。

awk '/file/{val=$0;gsub(/[a-zA-Z]|+|\[|\]/,"",val)} /^user/||/^password/{$NF="user"val} 1'  Input_file

解决方案第二: 在这种方法中,仅具有一个变量count,每次看到{{1}时该变量就会增加1。 }字符串。

file

如果要将输出保存到Input_file本身,请在上述代码中附加awk '/file/{count++} /^user/||/^password/{$NF="user"count} 1' Input_file