2017-02-16 2 views
1

ich eine Textdatei mit diesem Sample-Wert gefüllt habe:einfügen Variablenwert in der Spalte mit: Separator

1:0:0:Monitoring stuff with Zabbix/OCS:24 HOURS 

So würde Ich mag das zweite Feld mit einer Variablen ändern. Ich versuche, dies zu tun:

#!/bin/bash 

PRIOR="Priority = 1 - Must have | 2 - Nice to have | 3 - Interesting | 0 - Not interesting" 

while read -r line; 
do 
echo $line 
echo $PRIOR 
echo -n "Set your priority: " 
read SETP</dev/tty 
echo "Priority defined: "$SETP 
<change my 2nd column value with $SETP> 
done < courses.txt 

Antwort

3

hier ist ein Weg,

newline=$(echo "$line" | sed "s/:[^:]\+/:$SETP/") 

, die den ersten Doppelpunkt, gefolgt von nicht-Doppelpunkt-Zeichen mit einem Doppelpunkt ersetzt und die Eingabe des Benutzers.

Einige Code-Review Hinweise:

  • Gewöhnen gute Vertiefung der Verwendung - Ihre Zukunft selbst wird es Ihnen danken für lesbaren und wartbaren Code zu schreiben
  • nicht ALL_CAPS_VARNAMES verwenden, für die diejenigen verlassen Shell - eines Tages wirst du read PATH schreiben und dich dann wundern, warum dein Skript kaputt ist.
    • priorities="...", read setp, etc
  • quote your variables - das tun immer es sei denn, Sie wissen genau, wann sie nicht notierte zu verlassen.
    • echo "$line"
    • echo "Priority defined: $setp" - Variable innerhalb der Anführungszeichen
  • die Eingabe des Benutzers validieren:
    • if [[ $setp == *[^0-9]* ]]; then echo "digits only! try again"; fi
  • in bash können Sie read -p "Set your priority: " setp < /dev/tty schreiben - nicht brauche eine separate Echo-Anweisung
  • Die Datenstrukturen, die Ihre Sprache unterstützt, sind wichtig - lernen Sie, wie Sie Bash-Arrays verwenden.
+0

Schön, danke glenn für die Antwort und Code-Review, ich werde das in meinen nächsten Skripten beachten. – bgomes06

Verwandte Themen