Newsgroup: it.comp.os.linux.iniziare
Titolo: grep: mostrare solo il numero di una linea contenente la stringa cercata

avevo bisogno, per usarlo in uno script, che grep mi indicasse solo il 
numero della linea in cui trova la stringa fornitagli, senza la stringa 
stessa
con
grep -n stringa <file
ottengo sì il numero ma anche la stringa
esiste il modo con grep di mostrare solo il numero? finora le mie ricerche 
non hanno dato risposta all'interrogativo
-- 
Puppy Linux wiki:  
http://puppylover.netsons.org/dokupuppy
Puppy Linux Forum: 
http://puppylinux.ilbello.com
Windows me genuit, Ubuntu rapuere / tenet nunc Puppy Linux...

 ricerche non hanno dato risposta all'interrogativo
grep -n stringa file |cut -d ':' -f 1

 esiste il modo con grep di mostrare solo il numero? ...
grep -n regexp files  | cut -d: -f1,2 
awk /regexp/ {print FILENAME, FNR}
***NON PROVATI***

 esiste il modo con grep di mostrare solo il numero? ...
grep -n regexp files...  | cut -d: -f1,2 
awk /regexp/ {print FILENAME, FNR} files...
***NON PROVATI***

 grep -n stringa file |cut -d ':' -f 1
[...]
grazie ragazzuoli, mi serviva identificare il numero della riga (13) per poi 
sostituirne tutto il contenuto:
<icon x="416" y="32" label="console">/usr/bin/rxvt</icon> 
con
<icon x="416" y="32" label="console" args="-b 7 -w 1">/usr/bin/mrxvt</icon>
ho un po' di problemi a farlo con awk in quanto scrivendola così:
awk '{if (NR==13) $0="<icon x="416" y="32" label="console" args="-b 7 -w 1">/usr/bin/mrxvt</icon>";print}' old > new 
l'espressione non è correttamente interpretata, dovrò rompermi un po'
la testa, è d'altra parte probabile che il mio sia un approccio sbagliato
grazie intanto per l'input


 poi sostituirne tutto il contenuto:
Quando imparerete che bisogna postare il proprio problema e non la propria
soluzione.
 
sed '3 c\
<icon x="416" y="32" label="console" args="-b 7 -w 1" /usr/bin/mrxvt</icon>
' oldfile > newfile 
awk '(NR==13) {
   print "<icon x=\"416\" y=\"32\" label=\"console\" args=\"-b 7 -w 1\" /usr/bin/mrxvt</icon>"
   getline
 }
 {print}
' oldfile > newfile
Od uno delle tante miriadi di modi equivalenti.
Ecco, ora spiega a cosa serve sapere il numero di riga e perché non 
lo hai cambiato a mano con un text editor perché sicuramente stai 
seguendo l'approccio sbagliato.
Ed ora vai dietro la lavagna ad imparare come si usano gli escape.

 grazie intanto per l'input
insomma voi fare un qualcosa del genere:
grep rxvt file  \
  | grep 'label="console"' \
  | sed -e 's/console/&" args="-b 7 -w 1/' \
  | sed -e 's/rxvt/m&/'
oppure
$2 == "x=\"416\"" && $3 == "y=\"32\"" {
	sub(/console/, "console\" args=\"-b 7 -w 1");
	print; }
ciao
michele

 l'approccio sbagliato.
[...]
questa riga è nel file xml della Pinboard (l'equivalente del desktop) di 
Rox Filer, la sua posizione è fissa se non si sono aggiunte altre icone 
(sempre al n° 13) ma se l'utente ha personalizzato la Pinboard, in questo 
file la riga della console non sarà più in tredicesima posizione, 
essendosene aggiunte altre (e non sono in ordine alfabetico nel file, ma 
casuale), cercavo di trovare il modo di indicare a awk il numero della 
riga contenente quella stringa (console) in qualsiasi posizione si 
trovasse e ingenuamente credevo di poter passare
grep -n stringa file |cut -d ':' -f 1
come argomento di
(NR==numero_di_riga)
in modo che il numero della riga contenente quella stringa fosse 
individuato in automatico


   | sed -e 's/rxvt/m&/'
[...]
qualcosa del genere, a me interessa cambiare, in un file contenente 
diverse altre righe, quella in cui compare la stringa: console ed ottenere 
un file di output che contenga, oltre a questa riga cambiata, anche tutte 
le altre, essendo il file un file xml racchiuso fra i tag tag
<?xml version="1.0"?>
<pinboard>
</pinboard>
prestavo attenzione al numero di riga così che la riga sostituita, 
posizionandosi al posto di quella vecchia, si trovasse sicuramente 
all'interno dei tag


 sbagliato grazie intanto per l'input
Cosi` di getto, non testato, un approccio diverso.
ed <filename> <<!EOS
/<riga_da_cercare>
c
<nuovo_contenuto_della_riga
.
w
q
!EOS
-- 
--> x3m <--

 ricerche non hanno dato risposta all'interrogativo
grep -n stringa file| cut -c1

crunch ha scritto:



Ottimo, lo sto usando in uno script dove devo erstrarre solo un numero da
una stringa (carattere 25), ma se il numero e' composto di due cifre?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 da una stringa (carattere 25), ma se il numero e' composto di due cifre?
grep -n stringa file| cut -c25-26

 una stringa (carattere 25), ma se il numero e' composto di due cifre?
cut -d: -f2-
-- 
By ZeD

 ...
L'approccio è sbagliato. Se tu riesci ad individuare con AWK l'
espressione regolare allora non ti serve sapere il numero di riga 
poiché AWK è capace di cambiare la riga senza ricorrere ad altri 
programmi. Il problema è appunto individuare la stringa da cambiare
ma se riesci a farlo con grep allora puoi farlo anche con sed ed awk
Altrimenti c'é Perl.