Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用sed修改文件_Linux_Bash_Awk_Sed - Fatal编程技术网

Linux 使用sed修改文件

Linux 使用sed修改文件,linux,bash,awk,sed,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 = 80

我有一个这种格式的文件

[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
提前感谢您的帮助


-你能试试下面的吗

解决方案1:从行中的文件字符串中获取数字,然后将其添加到用户和密码字符串行中

awk '/file/{val=$0;gsub(/[a-zA-Z]|+|\[|\]/,"",val)} /^user/||/^password/{$NF="user"val} 1'  Input_file
解决方案2:在这种方法中,只要有一个变量计数,每当它看到上面的文件字符串时,它就会增加1

awk '/file/{count++} /^user/||/^password/{$NF="user"count} 1' Input_file

如果您想将输出保存到输入文件本身,请在上述代码中附加>临时文件和&mv临时文件输入文件。

您尝试过什么sed命令?我尝试过这个命令:sed's/username=admin/username=user1/'file[file1]username=user1 password=****ips=X.X.X port=8000[file2]username=user1 password=****ips=X.X.X.X port=8000编辑您的问题并在那里添加sed命令;让你的问题独立。sed可能不是最好的选择。awk或perl或ruby或python或其他更好的方法。@wasay,很高兴您向我们展示了您的尝试,请始终将它们添加到您的帖子中,因为我们都在这里学习,现在将此添加到您的帖子的代码标记中,并查看我的答案,如果这对您有帮助的话?谢谢Ravinder!您的解决方案正是我现在所需要的,但我的用户名和密码并不总是与文件号一致。例如:file3的用户名可以是user4,密码可以是user5。[file3]username=user4 password=user5 ips=X.X.X.X port=8000我为我的提问不准确,也没有输入我尝试过的命令而道歉。@wasay,那么请告诉我获取需要打印的user和password值的逻辑是什么?不清楚,请解释一下它的逻辑。