例如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
变量,其中id
和nm
用于将用户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