使用Linux shell脚本替换给定文本的字符串

时间:2014-04-07 05:25:06

标签: linux bash shell sed awk

我有一个名为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,但它不适用于此..

任何人都可以给我解决方案或更正我的代码......谢谢

1 个答案:

答案 0 :(得分:1)

您在g命令中使用sed标志,这意味着全局替换(将更改所有事件)。此外,虽然引用的变量包含在单引号内,因此不进行插值。

试试这个:

sed -i "s/^$user/$newuser/" /mypractice/myfiles/testfile

我在替换部分放置了一个^锚点,这意味着只有当该单词位于该行的开头时才能替换。如果用户的名称不在开头但在中间的某个位置,这可以防止您进行更改。