È necessario sostituire il carattere speciale "/" con un'altra stringa?

sed si lamenta perché

sed 's/\/\ = /'

manca il separatore tra il modello e la sostituzione - secondo l'output previsto suppongo che tu abbia semplicemente digitato erroneamente \ per /, e che in realtà volevi digitare:

sed 's/\// = /'

Come accennato nei commenti, in generale, è utile cambiare sedquando si ha a che fare con le barre, per evitare confusione e rendere gli script più leggibili (il separatore è determinato dal carattere immediatamente successivo s). Per esempio:

sed 's@/@ = @'

Tuttavia , l'analisi ls non è mai una buona soluzione ; inoltre, personalmente, in questo caso non mi preoccuperei nemmeno di provare ad essere fantasioso con una pipa, e farei semplicemente un loop 1 :

for l1 in /sys/class/net/*; do
    l2="${l1}"/device/driver/module
    [ -L "${l2}" ] || continue

    mpath=$(readlink "${l2}")
    printf '%s = %s\n' "${l1##*/}" "${mpath##*/}"
done
  • [ -L "${l2}" ] || continue: salta le interfacce che non hanno un modulo caricato
% for l1 in /sys/class/net/*; do
l2="${l1}"/device/driver/module
[ -L "${l2}" ] || continue

mpath=$(readlink "${l2}")
printf '%s = %s\n' "${l1##*/}" "${mpath##*/}"
done
enp114s0 = igc
wlo1 = iwlwifi

1: realpath non era ampiamente supportato. Non ho lavorato su sistemi abbastanza diversi per affermare che questo non sia più vero oggi (sospetto che non lo sia), quindi ho usato readlink qui, comunque se ne hai realpath disponibile, usa quello invece.

Ultimo aggiornamento 19.10.2024 16:55:42
index FAQ