Trova il numero nella stringa e sostituiscilo


1

Ho scritto codice C ++ e ora voglio sostituire il numero in una stringa usando gli script di shell.

La parte che deve essere sostituita:

if (random<=90)

Come posso cambiare il 90 da uno script di shell?

Ho scritto questo, ma ho bisogno di qualcosa di efficiente diverso sedo con una migliore espressione regolare solo per abbinare il numero stesso.

for i in {1..1000..100}
do
sed -i "s/(random<=.*)/(random<=$i)/g" myfile
done

@slhck sto lavorando con NS3 e ns3 è un simulatore basato su Linux che usa il file C ++ per costruire la rete. e ogni volta che ho bisogno di cambiare qualche parametro di rete ho bisogno di cambiare il file c ++ (la modifica è stata fatta per una domanda)
Arash

dal modo in cui penso che questo non sia un problema XY perché il file C ++ è solo per la creazione dei risultati non per il calcolo e tutti i calcoli af eseguiti con script di shell. potresti aiutarmi con questo?
Arash,

1
Conosco NS3. Penso che sarebbe più semplice se invece potessi semplicemente passare argomenti al file C ++. Comunque ... qual è la vera domanda? La tua sceneggiatura funziona, vero? L'unica cosa che non va è che sovrascriverà sempre myfilefino random<=901all'ultima iterazione.
slhck,

@slhck come posso sostituire solo il numero? e quale strumento mi offri
Arash,

Risposte:


1

Se vuoi solo abbinare il numero, hai bisogno di lookbehind positivo e lookahead . sednon supporta questo, ma lo perlfa.

perl -pi -e "s/(?<=\(random<=).*(?=\))/$i/g" myfile

Spiegare:

(?<=                         positive lookbehind
  \(random<=                 match a literal (random<=
)
.*                           match any character, multiple times
(?=                          positive lookeahead
  \)                         match a literal )
)

Le partite lookbehind e lookahead non vengono utilizzate, quindi puoi sostituirle con $i.


penso che tu sia il padre di Linux :)
Arash,

Problema risolto!
Arash,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.