Go Premium for a chance to win a PS4. Enter to Win

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 603
  • Last Modified:

traverse through a file to replae tab with pipe

Hi can someone fill in the below function, not very handy with perl. Thanks

sub replaceTab{
my $file = $_;

//replace all tab in $file with pipe |  

1 Solution
Give this a try (from: : http://www.linuxquestions.org/questions/programming-9/perl-replace-text-in-file-476382/)

All you need is this:

/usr/bin/perl -p -i -e "s/$1/$2/g" $3

For example, let's say you want to change all occurrences of "rabbit" to "blueberry" in all ".html" files in the current directory. You would:

/usr/bin/perl -p -i -e "s/rabbit/blueberry/g" *.html

The above script executes perl as a one-liner, using shell to parse the substitution parameters. The perl part is:

/usr/bin/perl -p -i -e "s/$1/$2/g" $3


causes Perl to assume the following loop around your program, which makes it iterate over filename arguments somewhat like sed:

while (<>) {
... # your program goes here
} continue {
print or die "-p destination: $!\n";

If a file named by an argument cannot be opened for some reason, Perl warns you about it, and moves on to the next file. Note that the lines are printed automatically. An error occurring during printing is treated as fatal. To suppress printing use the -n switch. A -p overrides a -n switch.

BEGIN and END blocks may be used to capture control before or after the implicit loop, just as in awk.

specifies that files processed by the <> construct are to be edited in-place. It does this by renaming the input file, opening the output file by the original name, and selecting that output file as the default for print() statements. The extension, if supplied, is used to modify the name of the old file to make a backup copy, following these rules:

If no extension is supplied, no backup is made and the current file is overwritten.

If the extension doesn't contain a *, then it is appended to the end of the current filename as a suffix. If the extension does contain one or more * characters, then each * is replaced with the current filename. In Perl terms, you could think of this as:

($backup = $extension) =~ s/\*/$file_name/g;

-e commandline
may be used to enter one line of program. If -e is given, Perl will not look for a filename in the argument list. Multiple -e commands may be given to build up a multi-line script. Make sure to use semicolons where you would in a normal program.

performs the string substitution

is the filename glob

You need something like this:

sub replaceTab {      
      open INPUTFILE, "<", $ARGV[0] || die "Couldn't open the file!";
      open OUTPUTFILE, ">", $ARGV[1] || die "Couldn't open the file!";
      while (<INPUTFILE>) {
        $_ =~ s/\t/\|/g;
        print OUTPUTFILE $_;
      close INPUTFILE;
      close OUTPUTFILE;

More efficient for replacing single characters is tr///.

perl -p -i -e 'tr/\t/\|/' *.html

or replace s/// with tr/// in Fidelius answer.
gagaliyaAuthor Commented:
perfect, thank you guys.

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now