使用Sed更新Bourne Shell中的文本

使用Sed更新Bourne Shell中的文本,sed,sh,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=$(! gre

我正在尝试更新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
echo“请输入名称:\c”
读取更新输入
updateNumber=$(grep-cwi“$updateInput”database.txt)
updateRecord=$(grep-i“$updateInput”database.txt)
test=$(!grep-i“$updateInput”database.txt)
如果[“$updateNumber”-gt“1”]
然后
回声“模棱两可的输入”
elif[“$updateRecord”=”]
然后
回显“未找到记录”
其他的
行号=$(grep-ni$updateInput database.txt | cut-f1-d:)
grep-i$updateInput database.txt>tmp
阅读第一个最后一个年龄段课程1课程2

在运行时,sed输出正确的输出,并更改了正确的内容,但实际上根本不会更新数据库文件。我试过用谷歌搜索各种东西,但都没用。如果有人能给我指出正确的方向,那就太棒了。非常感谢:)

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

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

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

当我使用-I时,我会出现以下错误:“sed:1:“database.txt”:d命令末尾的额外字符“@danzaDON'T dot experiments on the reactive text file!”)我认为这是把
database.txt
作为一个命令。从另一个文件的命令行对sed进行一些实验,然后返回脚本