"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

awk

lama007 10.11.2006 - 22:22 969 4
Posts

lama007

OC Addicted
Avatar
Registered: Mar 2002
Location: Austria
Posts: 851
zwei Fragen:
wie kann ich die Variable var1 in der awk-Zeile Muster nutzen?
beim 'text' habe ich Probleme mit den einfachen Anführungszeichen trotz backslash; wie muss ich es schreiben, damit es funktioniert?




#! /bin/sh

echo -n "Muster :"
read var1
awk '$1 ~ /var1/{print $1"\'text\'"}' /Ordner/Datei

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Seh ich das richtig, und das ist eigentlich eine Shell-Frage?
Was soll das Script überhaupt machen?

NyoMic

xepera-xeper-xeperu
Avatar
Registered: Feb 2001
Location: Stahlstadt
Posts: 2619
die frage kapiere ich auch nicht ganz :confused:
Du liest einen wert in die variable var1 ein und nutzt ihn dann nicht?
Ev. meinst du:

#! /bin/sh

echo -n "Muster :"
read var1
awk '$1 ~ /$var1/{print $1"'text'"}' /Ordner/Datei
Bearbeitet von NyoMic am 11.11.2006, 01:19

lama007

OC Addicted
Avatar
Registered: Mar 2002
Location: Austria
Posts: 851
#! /bin/sh


# ich möchte diese Funktion für ein Konfigurationsskript zum laufen bringen

editconfig()
{
nr=$(awk '$1 ~ /$muster/{print NR }' $Datei)
sed '$nr c \
$t$muster$wert' $Datei > ~/puff
cat ~/puff > $Datei
}

# z.B.

Datei="/etc/sysconfig/network/ifcfg-eth-id-00:11:22:33:44:55"
muster="BOOTPROTO="
wert="\'static\'"
t=
# editconfig

Datei="/etc/bluetooth/rfcomm.conf"
muster="bind"
wert=" yes;"
t="\t"
# editconfig


Datei="/etc/bluetooth/rfcomm.conf"
muster="bind"
wert=" yes;"
t="\t"

# funktioniert:
#
# nr=$(awk '$1 ~ /bind/{print NR }' $Datei) #### 7
# sed '7 c \
# \tbind yes;' $Datei > ~/puff
# cat ~/puff ############# > $Datei

# einfache Anführungszeichen:
# Variablen funktionieren nicht
# und Text in einfachen Anführungszeichen (z.B \\'static\\') macht Probleme
#
# nr=$(awk '$1 ~ /$muster/{print NR }' $Datei)
# sed '$nr c \
# $t$muster$wert' $Datei > ~/puff
# cat ~/puff ##### > $Datei

# doppelte Anführungszeichen:
# awk-Fehlermeldung
# awk: ~ /bind/{print NR }
# awk: ^ syntax error
# und \t wird als normaler Text gelesen ( tbind yes; )
#
# nr=$(awk "$1 ~ /$muster/{print NR }" $Datei)
# sed "$nr c \
# $t$muster$wert" $Datei > ~/puff
# cat ~/puff ##### > $Datei
Bearbeitet von lama007 am 11.11.2006, 13:06

lama007

OC Addicted
Avatar
Registered: Mar 2002
Location: Austria
Posts: 851
so funktioniert es:

#! /bin/sh

editconfig()
{
nr=$(awk -v mu="$muster" '$1 ~ mu {print NR }' $Datei)
sed "$nr c \
$t$muster$wert" $Datei > ~/puff
cat ~/puff > $Datei
}

Datei="/etc/bluetooth/rfcomm.conf"
muster="bind"
wert=" yes;"
t="\ "

editconfig
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz