# Deleting Text From a File

**URL:** <https://www.ruby-forum.com/t/deleting-text-from-a-file/121506>\
**Category:** Ruby\
**Created:** [November 28, 2007, 3:40pm UTC](https://www.ruby-forum.com/t/deleting-text-from-a-file/121506 "2007-11-28T15:40:33Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![woodyee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/43a26b/32.png) [@woodyee](https://www.ruby-forum.com/u/woodyee)\
**Post date:** [November 28, 2007, 3:40pm UTC](https://www.ruby-forum.com/t/deleting-text-from-a-file/121506/1 "2007-11-28T15:40:33Z")

</div>

Hi! I had to manually remove decimals and tildes from a text file. How  
could I have done this via programming? I googled this but didn’t  
really find anything, just stuff on removing spaces. Basically, I’d  
like to be able to search a file and remove certain items (ex - all  
decimals and tildes). Thanks!

---

<div class="post-metadata">

**Author:** ![woodyee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/43a26b/32.png) [@woodyee](https://www.ruby-forum.com/u/woodyee)\
**Post date:** [November 28, 2007, 3:45pm UTC](https://www.ruby-forum.com/t/deleting-text-from-a-file/121506/2 "2007-11-28T15:45:14Z")

</div>

woodyee wrote:

> Hi! I had to manually remove decimals and tildes from a text file. How  
> could I have done this via programming? I googled this but didn’t  
> really find anything, just stuff on removing spaces. Basically, I’d  
> like to be able to search a file and remove certain items (ex - all  
> decimals and tildes). Thanks!

Sounds like a job for regular expressions. Have you got a short before  
and after example?

---

<div class="post-metadata">

**Author:** ![woodyee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/43a26b/32.png) [@woodyee](https://www.ruby-forum.com/u/woodyee)\
**Post date:** [November 28, 2007, 5:32pm UTC](https://www.ruby-forum.com/t/deleting-text-from-a-file/121506/3 "2007-11-28T17:32:48Z")

</div>

On Nov 28, 9:44 am, Alex Y. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> –  
> Alex

Sure. See below. Basically, the entire document was like this. To me,  
Reg Exp’s were the key but they’re a weakness of mine so I was  
lost. 🙂

## Original

89.00 ~~~~  
6330.00~15~CAT1~0005~1.00

Modified

---

<div class="post-metadata">

**Author:** ![woodyee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/43a26b/32.png) [@woodyee](https://www.ruby-forum.com/u/woodyee)\
**Post date:** [November 28, 2007, 5:39pm UTC](https://www.ruby-forum.com/t/deleting-text-from-a-file/121506/4 "2007-11-28T17:39:50Z")

</div>

woodyee wrote:

> > –  
> > 6330.00~15~CAT1~0005~1.00
> 
> ## Modified
> 
> 89  
> 6330 15 CAT1 0005 1

irb(main):001:0\> file = “89.00 ~~~~  
irb(main):002:0” 6330.00~15~CAT1~0005~1.00  
irb(main):003:0"  
irb(main):004:0" "  
=\> “89.00 ~~~~ \n6330.00~15~CAT1~0005~1.00\n\n”  
irb(main):005:0\> file.gsub(/.\d+/, ‘’).tr(’~’, ’ ')  
=\> “89 \n6330 15 CAT1 0005 1\n\n”  
irb(main):006:0\> puts \_  
89  
6330 15 CAT1 0005 1

I think that should do it 🙂 I don’t think it’s feasible to do it all  
in a single pass, which is why I’ve gone for separate gsub and tr  
phases.

---

<div class="post-metadata">

**Author:** ![woodyee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/43a26b/32.png) [@woodyee](https://www.ruby-forum.com/u/woodyee)\
**Post date:** [November 28, 2007, 6:12pm UTC](https://www.ruby-forum.com/t/deleting-text-from-a-file/121506/5 "2007-11-28T18:12:01Z")

</div>

On Nov 28, 8:38 am, woodyee [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Hi! I had to manually remove decimals and tildes from a text file. How  
> could I have done this via programming? I googled this but didn’t  
> really find anything, just stuff on removing spaces. Basically, I’d  
> like to be able to search a file and remove certain items (ex - all  
> decimals and tildes). Thanks!

How about…

“he~~ll.o”.tr(‘~.’, ‘’) # =\> “hello”

String#tr translates a group of characters into another group, such  
that for every character in a given position in group one, it is  
replaced by the character in the same position in group two, or if  
group two is shorter, it uses the last character in group two. In this  
case, group two is empty, so everything in group one is replaced with  
empty strings (i.e., deleted).

HTH,  
Jordan

---

<div class="post-metadata">

**Author:** ![woodyee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/43a26b/32.png) [@woodyee](https://www.ruby-forum.com/u/woodyee)\
**Post date:** [November 28, 2007, 10:56pm UTC](https://www.ruby-forum.com/t/deleting-text-from-a-file/121506/6 "2007-11-28T22:56:12Z")

</div>

On Nov 28, 2:00 pm, yermej [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ruby -i.bak -n -e ‘print $\_.gsub(/[.~]/, “”)’ input\_file.txt
> 
> Jeremy

WOW! It worked and it was so cool!! Thanks! One thing I did - I  
modified it to delete the .00’s:

ruby -i.bak -n -e ‘print $\_.gsub(/[.00~]/, " ")’ input\_file.txt

This worked but it deleted the zero in front of the decimal. How can I  
avoid this? Thanks! 🙂

---

<div class="post-metadata">

**Author:** ![woodyee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/43a26b/32.png) [@woodyee](https://www.ruby-forum.com/u/woodyee)\
**Post date:** [November 28, 2007, 8:06pm UTC](https://www.ruby-forum.com/t/deleting-text-from-a-file/121506/7 "2007-11-28T20:06:49Z")

</div>

On Nov 28, 8:38 am, woodyee [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Hi! I had to manually remove decimals and tildes from a text file. How  
> could I have done this via programming? I googled this but didn’t  
> really find anything, just stuff on removing spaces. Basically, I’d  
> like to be able to search a file and remove certain items (ex - all  
> decimals and tildes). Thanks!

This will remove all decimals and tildes and create a backup of the  
original file with the extension .bak (from the command line):

ruby -i.bak -n -e ‘print $\_.gsub(/[.~]/, “”)’ input\_file.txt

Jeremy

---

<div class="post-metadata">

**Author:** ![woodyee](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/43a26b/32.png) [@woodyee](https://www.ruby-forum.com/u/woodyee)\
**Post date:** [November 28, 2007, 11:30pm UTC](https://www.ruby-forum.com/t/deleting-text-from-a-file/121506/8 "2007-11-28T23:30:46Z")

</div>

On Nov 28, 3:50 pm, woodyee [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > This will remove all decimals and tildes and create a backup of the
> 
> This worked but it deleted the zero in front of the decimal. How can I  
> avoid this? Thanks! 🙂

Typically, when you characters in [], it means to match any character  
in that group. So, [.00~] is the same as [.0~] is the same as [0.~]  
etc. so you removed all occurrences of 0, ., and ~ no matter what  
surrounded them.

If you want to delete just .00 and ~, try:

/.00|~/

as the first argument to gsub. That means match .00 or ~ and nothing  
else.

This is probably a decent site if you want to learn more about regular  
expressions:

> **[Regular Expression Tutorial - Learn How to Use Regular Expressions](https://www.regular-expressions.info/tutorial.html)**
>
> This tutorial teaches you how to create your own regular expressions, starting with the most basic regex concepts and ending with the most advanced and specialized capabilities.

Jeremy
