# Ruby with regular expression

**URL:** <https://www.ruby-forum.com/t/ruby-with-regular-expression/77157>\
**Category:** Ruby\
**Created:** [November 24, 2006, 9:00pm UTC](https://www.ruby-forum.com/t/ruby-with-regular-expression/77157 "2006-11-24T21:00:45Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![peppermonkey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/e56c9b/32.png) [@peppermonkey](https://www.ruby-forum.com/u/peppermonkey)\
**Post date:** [November 24, 2006, 9:00pm UTC](https://www.ruby-forum.com/t/ruby-with-regular-expression/77157/1 "2006-11-24T21:00:45Z")

</div>

Hi,  
I’m new to Ruby (and Regular expressions in general) and as such,  
this is rather a newbie question but I’m trying to write a script in  
Ruby to open a file and do some string manipulation.  
Basically I’m getting hung up with regular expressions.  
Suppose there is a file that contains, among other lines, lines of the  
following structure.

“This [1234567890] points to [0987654321]”

Assume the line structure (words, spaces etc.) stay constant.  
The actual numbers (within the brackets) are not constant.  
There is always 10 numbers within the brackets.  
There are other lines that have numbers enclosed by ‘[’,’]’ that must  
be left alone.

How can you replace only those numbers in the above structure to  
“xxxxxxxxxx”?  
Openning a file, searching the file, writing to the file I’m presuming  
is simple but the expression to identify and then replace those numbers  
are giving me problems. Any help would be greatly appreciated.

Thank you.

---

<div class="post-metadata">

**Author:** ![peppermonkey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/e56c9b/32.png) [@peppermonkey](https://www.ruby-forum.com/u/peppermonkey)\
**Post date:** [November 24, 2006, 9:10pm UTC](https://www.ruby-forum.com/t/ruby-with-regular-expression/77157/2 "2006-11-24T21:10:49Z")

</div>

peppermonkey wrote:

> Assume the line structure (words, spaces etc.) stay constant.
> 
> Thank you.

This will modify the original file and create a backup file.  
(And it should be a single line.)

ruby -i.bak -pe"sub(/This [\d{10}] points to [\d{10}]/, ‘This  
[xxxxxxxxxx] points to [yyyyyyyyyy]’)" myfile

---

<div class="post-metadata">

**Author:** ![peppermonkey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/e56c9b/32.png) [@peppermonkey](https://www.ruby-forum.com/u/peppermonkey)\
**Post date:** [November 24, 2006, 9:14pm UTC](https://www.ruby-forum.com/t/ruby-with-regular-expression/77157/3 "2006-11-24T21:14:51Z")

</div>

William J. wrote:

> > are giving me problems. Any help would be greatly appreciated.
> > 
> > Thank you.
> 
> This will modify the original file and create a backup file.  
> (And it should be a single line.)
> 
> ruby -i.bak -pe"sub(/This [\d{10}] points to [\d{10}]/, ‘This  
> [xxxxxxxxxx] points to [yyyyyyyyyy]’)" myfile

Thank you!  
Looking at the solution makes me feel dumb. Should have come up with  
that. Wasn’t thinking simple enough. So yes, this is exactly what I was  
looking for. Thanks! Greatly appreciated!

Hubert

---

<div class="post-metadata">

**Author:** ![peppermonkey](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/e56c9b/32.png) [@peppermonkey](https://www.ruby-forum.com/u/peppermonkey)\
**Post date:** [November 25, 2006, 6:53pm UTC](https://www.ruby-forum.com/t/ruby-with-regular-expression/77157/4 "2006-11-25T18:53:27Z")

</div>

On Sat, Nov 25, 2006 at 04:48:01AM +0900, peppermonkey wrote:  
} Hi,  
} I’m new to Ruby (and Regular expressions in general) and as such,  
} this is rather a newbie question but I’m trying to write a script in  
} Ruby to open a file and do some string manipulation.  
} Basically I’m getting hung up with regular expressions.  
} Suppose there is a file that contains, among other lines, lines of the  
} following structure.  
}  
} “This [1234567890] points to [0987654321]”  
}  
} Assume the line structure (words, spaces etc.) stay constant.  
} The actual numbers (within the brackets) are not constant.  
} There is always 10 numbers within the brackets.  
} There are other lines that have numbers enclosed by ‘[’,’]’ that must  
} be left alone.  
}  
} How can you replace only those numbers in the above structure to  
} “xxxxxxxxxx”?  
} Openning a file, searching the file, writing to the file I’m presuming  
} is simple but the expression to identify and then replace those  
numbers  
} are giving me problems. Any help would be greatly appreciated.

It sounds to me like you are trying to substitute strings by reference,  
similar to localization. Based on that, I am assuming that you have a  
hash  
somewhere that maps these ten-digit numbers to the strings that should  
replace them. In that case, what you want is something like this:

str.gsub(/[(\d+)]/) { hash[$1.to\_i] }

} Thank you.  
–Greg
