使用Sed更新Bourne Shell中的文本

时间:2013-03-29 19:07:20

标签: sed sh

我正在尝试更新Bourne Shell中的文件。用户输入名称,然后提示更改人名,年龄和课程。这是我写的代码的一部分:

  echo "please enter the name: \c"
   read updateInput

   updateNumber=$(grep -cwi "$updateInput" database.txt)
   updateRecord=$(grep -i "$updateInput" database.txt)

   test=$(! grep -i "$updateInput" database.txt)

   if [ "$updateNumber" -gt "1" ]
   then
          echo "ambiguous input"
   elif [ "$updateRecord" = "" ]
   then
           echo "record not found"
   else
           lineNumber=$(grep -ni $updateInput database.txt | cut -f1 -d:)

           grep -i $updateInput database.txt > tmp
           read first last age course1 course2 < tmp

           echo "record found, enter new value now:"
           echo "name ($first $last): \c" 
           read uFirst uLast
           if [ "$uFirst" != "" ]
           then
                   sed "$lineNumber s/$first/$uFirst/" database.txt
           fi
           if [ "$uLast" != "" ]
           then
                   sed "$lineNumber s/$last/$uLast/g" database.txt
           fi

运行时,sed会输出正确的输出并更改正确的内容,但实际上并不会更新数据库文件。我试过谷歌搜索各种各样的东西,但没有任何工作。如果有人能指出我正确的方向,那将是非常棒的。非常感谢:)。

1 个答案:

答案 0 :(得分:2)

如果这是GNU sed,您可以使用-i选项来编辑文件:

sed -i "$lineNumber s/$first/$uFirst/" database.txt

否则,您需要将sed输出捕获到临时文件中,然后将其复制到原始文件中。