0
1

Buongiorno, cercando ho travato questo comando

sed -e "s/VECCHIASTRINGA/NUOVASTRINGA/g"

questo metodo non va bene, a me servirebbe sovrascriverla ma cioè

sed -e "s/stringa3/NUOVASTRINGA/g"

andando per numero di stringhe.
Se interessa vi spiego cosa voglio/vorrei ottenere, magari con il vostro aiuto riusciamo ad ottenere un cosa più elegante ? :)

Grazie

ok, cerco di spiegarmi, son riuscito a configurare "hostapd" cioè creare reti non ad hoc, però se voglio cambiare nome della rete e password devo usare gedit editando il file "hostapd.conf" cioè due stringhe, terza stringa ssid=hotspot; ottava stringa wpa_passphrase=password.

io ci sono quasi, in questo modo:

#!/bin/bash
file=$(zenity --entry --title="Nome_Rete" --text="Digita il nome della rete:")
if [ ! -z "$file" ] ; then
    essid=$(basename "$file")
    sudo sed -i "s/hotspot/"${essid##*.}"/g" /root/hostapd.conf
fi

file=$(zenity --entry --title="Password" --text="Digita la nuova password:")
if [ ! -z "$file" ] ; then
    psw=$(basename "$file")
    sudo sed -i "s/password/"${psw##*.}"/g" /root/hostapd.conf && sudo cp /root/hostapd.conf /etc/hostapd && sudo cp /root/host/hostapd.conf /root
fi

Praticamente ho fatto un macello, ma comunque ci sono quasi, ma mi fido di te @enzotib per un qualcosa di più elegante.

Ci tengo a dire che questi comandi/script li lancio creandomi una finestrina con i bottoni in python

Ciao e Grazie

con sed non è così perchè sto cercando di adattare questo comando:

sed -e "s/VECCHIASTRINGA/NUOVASTRINGA/g"

infatti l'esempio da me postato non va, però forse ci sono, ho pensato un'altra cosa, intanto ti posto il contenuto del file /etc/hostapd.conf

interface=wlan1
driver=nl80211
ssid=hotspot 
channel=1
hw_mode=g
auth_algs=1
wpa=3
wpa_passphrase=password
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

Ciao e Grazie

alla fine ecco la finestrina con i bottoni

se interessa lo script per la finestrina lo posto

chiesto 16 Jun '14, 12:49

Davide_74's gravatar image

Davide_74
632688193

modificato 17 Jun '14, 12:03

@Davide_74: sì, sarebbe il caso che spiegassi meglio, modificando la domanda.

(16 Jun '14, 16:04) enzotib ♦♦ enzotib's gravatar image

@Davide74: quando dici "ci sono quasi", in realtà significa che non ci sei ancora, altrimenti non chiederesti aiuto. Mi pare di capire che il problema è di sostituire solo la terza occorrenza di ssid=hotspot e l'ottava di wpa_passphrase=password, mentre adesso con sed non è così.
Sarebbe utile vedere il contenuto del file da modificare, potresti aggiungerlo alla domanda (con password e ssid fittizi, ovviamente)?

(16 Jun '14, 21:16) enzotib ♦♦ enzotib's gravatar image

Non mi è chiaro quello che fai con zenity, ma per sostituire l'ssid con "nuovo-valore" è sufficiente fare

sed "s/^\(ssid=\).*/\1nuovo-valore/" /etc/hostapd.conf

oppure, se il nuovo-valore è contenuto in una variabile, diciamo $var, allora

sed "s/^\(ssid=\).*/\1$var/" /etc/hostapd.conf

Allo stesso modo puoi fare per la passphrase:

sed "s/^\(wpa_passphrase=\).*/\1nuovo-valore/" /etc/hostapd.conf
coll. permanente

ha risposto 16 Jun '14, 22:39

enzotib's gravatar image

enzotib ♦♦
14.1k113187

noto che se, il nuovo valore contiene uno slash / non funziona vorrei modificare il comando di un lanciatore:

sed "s/^\(Exec=\).*/\1/home/user/script.sh/"
(04 Jan '18, 21:56) Davide_74 Davide_74's gravatar image

intanto Grazie, adesso provo i comandi postati da te.

con zenity apro una finestrina di dialogo per poi impostare il nome nuovo della rete oppure la nuova password.

intanto ho risolto in questo modo:

#!/bin/bash

sudo sed -i '3 d ' /etc/hostapd/hostapd.conf

sudo sed -i -e '3issid=hotspot \' /etc/hostapd/hostapd.conf

file=$(zenity --entry --title="Nome rete" --text="digita il nome della rete:")
if [ ! -z "$file" ] ; then
    essid=$(basename "$file")
    sudo sed -i "s/hotspot/"${essid##*.}"/g" /etc/hostapd/hostapd.conf
fi

sudo sed -i '8 d ' /etc/hostapd/hostapd.conf

sudo sed -i -e '8password=password \' /etc/hostapd/hostapd.conf

file=$(zenity --entry --title="Password" --text="digita la nuova passowrd:")
if [ ! -z "$file" ] ; then
    pwd=$(basename "$file")
    sudo sed -i "s/password/"${pwd##*.}"/g" /etc/hostapd/hostapd.conf
fi

ma con i comandi da te postati forse evito tutta questa frittata di maccheroni :D

di nuovo Grazie

infatti ecco fatto:

#!/bin/bash

file=$(zenity --entry --title="Nome rete" --text="digita il nome della rete:")
if [ ! -z "$file" ] ; then
    essid=$(basename "$file")
    sudo sed -i "s/^\(ssid=\).*/\1"${essid##*.}"/" /etc/hostapd/hostapd.conf
fi

file=$(zenity --entry --title="Password" --text="digita la nuova passowrd:")
if [ ! -z "$file" ] ; then
    pwd=$(basename "$file")
    sudo sed -i "s/^\(wpa_passphrase=\).*/\1"${pwd##*.}"/" /etc/hostapd/hostapd.conf
fi

Grazie sempre a te :9

coll. permanente

ha risposto 16 Jun '14, 22:53

Davide_74's gravatar image

Davide_74
632688193

modificato 16 Jun '14, 23:28

enzotib's gravatar image

enzotib ♦♦
14.1k113187

@Davide_74: non dovresti usare le risposte per commentare le risposte di altri. La prossima volta usa i commenti oppure modifica la domanda.
Inoltre formatta il codice adeguatamente (basta mettere quattro spazi davanti ad ogni riga).

(16 Jun '14, 23:29) enzotib ♦♦ enzotib's gravatar image

non mi lasciava aggiungere il commento

adesso invece si, il fatto dei quattro spazi non ho capito, poi ci provo

di nuovo Grazie Ciao

(16 Jun '14, 23:38) Davide_74 Davide_74's gravatar image

Ecco un altro modo per ottenere lo stesso risultato:

cat /etc/hostapd.conf | awk -F "=" -vpwd=newpasswd -vid=newid '{if ($1 == "ssid") print $1 "=" id; else if ($1 == "wpa_passphrase") print $1 "=" pwd; else print $0;}' > /etc/hostapd.conf.new
mv /etc/hostapd.conf.new /etc/hostapd.conf

dove newpasswd e newid possono essere i valori di due variabili bash

coll. permanente

ha risposto 16 Jun '14, 23:27

letizia's gravatar image

letizia
7231519

Grazie anche a te :)

(16 Jun '14, 23:43) Davide_74 Davide_74's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×106

domanda posta: 16 Jun '14, 12:49

domanda visualizzata: 2,567 volte

ultimo aggiornamento: 04 Jan '18, 21:56

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.