0

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 は正しい内容が変更された正しい出力を出力しますが、実際にはデータベース ファイルはまったく更新されません。私はあらゆる種類のものをグーグルで試してみましたが、何も機能していません。誰かが私を正しい方向に向けることができれば、それは素晴らしいことです. 本当にありがとう :)

4

1 に答える 1

2

これが GNUsedの場合、-iオプションを使用してファイルをその場で編集できます。

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

それ以外の場合は、sed の出力を一時ファイルにキャプチャしてから、元のファイルにコピーする必要があります。

于 2013-03-29T19:14:25.350 に答える