我有一个名为testfile的文件。它包含一些信息,如
methun:x:500:500:comment:/home/methun:bin/bash
salahuddin:x:501:500:comment:/home/methun:bin/bash
现在实现了以下shell程序:
echo "Enter a Name:"
read username
users='cat /mypractice/myfiles/testfile | awk -F ':' '{print $1}''
for user in $users
do
if [ "$user" == "$username" ]; then
echo "Name found and Enter a new name to change."
read newUsername
#need code to change text on my file --->testfile
fi
done
现在假设我需要将methun改为Moin。评论新评论。我用了
sed -i 's/"$user"/"$newuser"/g' /mypractice/myfiles/testfile
但它不在这里工作。我在我的测试文件中单独测试它会改变并替换所有。但我只需要改变我想要的位置。
我也尝试过使用usermod,但它不适用于此..
任何人都可以给我解决方案或更正我的代码......谢谢
答案 0 :(得分:1)
您在g
命令中使用sed
标志,这意味着全局替换(将更改所有事件)。此外,虽然引用的变量包含在单引号内,因此不进行插值。
试试这个:
sed -i "s/^$user/$newuser/" /mypractice/myfiles/testfile
我在替换部分放置了一个^
锚点,这意味着只有当该单词位于该行的开头时才能替换。如果用户的名称不在开头但在中间的某个位置,这可以防止您进行更改。