2013-03-29 3 views
0

Я пытаюсь обновить файл в Bourne Shell. Пользователь вводит имя, а затем запрашивает изменение имени, возраста и курсов. Вот часть кода я написал:Использование Sed для обновления текста в оболочке Bourne

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 

При запуске СЭД выводит правильный вывод с правильными вещами изменилось, но это на самом деле не обновляет файл базы данных на всех. Я пробовал разыгрывать всевозможные вещи, но ничего не работает. Если бы кто-то мог указать мне в правильном направлении, это было бы потрясающе. Большое спасибо :)

ответ

2

Если это GNU sed, вы можете использовать опцию -i редактировать файл на месте:

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

В противном случае, вам нужно будет захватить SED вывод во временный файл, затем скопируйте его поверх исходного файла.

+0

Да, '-i' отсутствует в коде – danza

+0

Когда я использую -i, я получаю эту ошибку:" sed: 1: "database.txt": дополнительные символы в конце команды d "@danza – Josephine

+0

DON ' Проведите эксперименты в реальном текстовом файле! :) Я думаю, что он берет 'database.txt' как команду. сделайте некоторый эксперимент с sed из командной строки в другом файле, а затем вернитесь к своему скрипту – danza

Смежные вопросы