如何在shell脚本Linux中搜索用户id和替换名称



例如A=UserID

user.txt内容

A1:Alex:Password1
A2:John:Password2

搜索A2用户ID并将John用户名替换为Alexander

echo -n "Enter user id: "
read userID

输入用户id后,我需要在user.txt中搜索,找到用户id后输入替换名称John。

人们能帮我怎么做吗?我试过一些执行指令,但没有成功。我如何在Shell Script Linux中做到这一点?感谢

谢谢你的帮助我从答案中找到了做这件事的方法。

echo -n "Enter user id: "
read userID
echo -n "Enter user name: "
read userName
sed -i 's/'$userID':w*/'$userID':'$userName'/g' user.txt

sed命令添加到bash脚本中,如下所示

#!/bin/bash
echo -n "Enter user id: "
read userID
sed -i 's/A2:w*:/A2:'$userID':/g' user.txt

它将就地更改user.txt文件

另一个简单的方法是使用awk。您可以将userID和替换名称从shell传递到awk,然后找到第一个字段($1(与userID匹配的记录,并将名称(第三个字段$3(替换为新名称。

awk -v id="A2" -v nm="Alexander" -v OFS=":" -F: '$1==id {$3=nm}1' user.txt

字符串(或外壳变量(通过-v=value参数成为awk变量,其中idnm用于将用户ID和名称保存为awk变量。-v OFS=":"awk输出字段分隔符设置为":",以便在使用新名称修改记录后,将":"替换为分隔符。-F:命令awk使用":"作为字段分隔符,将记录(行(分隔为字段。末尾的1只是输出记录的默认操作print的简写。

示例使用/输出

使用heredoc提供您的输入,您可以做到:

$ awk -v id="A2" -v nm="Alexander" -v OFS=":" -F: '$1==id {$3=nm}1' << eof
> A1:Alex:Password1
> A2:John:Password2
> eof
A1:Alex:Password1
A2:John:Alexander

最新更新