Что за команда Vi удаляет строку из файла из пользовательского ввода? - PullRequest
0 голосов
/ 16 мая 2011

У меня есть файл и я хочу удалить строки, когда пользователь вводит идентификатор в UNIX / Vi.

Файл называется 'users' и содержит:

001:joe:one:20:01:02 
002:joe:two:21:06:02
003:joe:three:22:05:02
004:joe:four:23:04:02

Я использовалследующая функция в Vi:

 function deleteRecord()
  {

    echo "Please enter staff ID: "
    read userID

#store staffID in variable
    sID=$( grep -w "$userID" users )

    #store staff details only if user does not exist
    #else prompt them to input again until they enter unused data
    if [ $? -ne 0 ]
    then
            echo "Sorry that user does not exist!"
            echo "Try entering a different staff ID to delete"
            deleteRecord
    elif [ $? -eq 0 ]
    then
                    #:g/^$userID:/d

                    #sed /$userID/d users >tmp
                    #imv tmp users
                    echo "You have successfully deleted the user."
                    sleep 2
                    mainMenu
   fi

 }

Я пробовал это, но это не работает!Сед это проблема?

Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Лучше всего использовать встроенную функциональность . например,

:g/^theuserid:/d
0 голосов
/ 16 мая 2011

Только для удовольствия - вот твоя домашняя работа.В следующий раз отметьте это.

#!/bin/bash
IDFILE="./testfile"
function killVogon() {
while read -p 'Enter Vogon-ID (or "q" for return) >' id
do
    case "$id" in
        (q|Q) return;;
    esac
    grep "^0*$id:" "$IDFILE" >/dev/null 2>&1
    case $? in
        (0) ;;
        (1) echo "Although it is infinitely improbable, the '$id' does not exists!"; continue;;
        (*) echo "You're blind and can't see any Vogons around"; sleep 1 ; return;;
    esac
    sed -i '.bak' -e "/^0*$id:/d" "$IDFILE"
    case $? in
        (0) echo "The Vogon is successfully killed"; sleep 1; return;;
        (*) echo "Huh... Marvin, powered with pangalactic gargleblaster is too paranoid now. The Vogon is NOT killed" ;;
   esac
done
}
killVogon
...