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 sed
quando 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.