Ich versuche herauszufinden, wie Sie ein Kennwort für eine bestimmte Zeile und eine bestimmte Spalte in einer TXT-Datei suchen und ersetzen. Dies ist, wie es aussieht:Bash: Suchen und Ersetzen des Kennworts in einer TXT-Datei
Admin1 Pass1 1
Admin2 Pass2 1
User1 Upass1 0
User2 Upass2 0
Und hier ist mein Code:
while (true)
do
read -p 'Whose password would you like to change? Enter the corresponding user name.' readUser
userCheck=$(grep $readUser users.txt)
if [ "$userCheck" ]
then
echo $userCheck > temp2.txt
read -p 'Enter the old password' oldPass
passCheck=$(awk '{print$2}' temp2.txt)
if [ "$passCheck" == "$oldPass" ]
then
read -p 'Enter the new password' newPass
sed -i "/^$readUser/ s/$oldPass/$newPass/" users.txt
break
else
echo 'The username and/or password do not match. Please try again.'
fi
else
echo 'The username and/or password do not match. Please try again.'
fi
done
Benutzer1 Passwort Unter der Annahme, mit TESTEN ersetzt, ist dies das Ergebnis:
Admin1 Pass1 1 Admin2 Pass2 1 User1 TESTING 0 User2 Upass2 0
Was ich brauche ist das:
Admin1 Pass1 1
Admin2 Pass2 1
User1 TESTING 0
User2 Upass2 0
Dies hat mit fehlenden Zitat zu tun. Sie können jedoch Ihre letzten 2 Zeilen einfach ersetzen durch: 'sed -i" s/$ oldPass/$ newPass/g "users.txt'. Das '-i'-Flag für sed bedeutet in-place und speichert die Änderungen direkt in der Datei. – Aserre