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

Character replace in UNIX file

I have a .txt file in Solaris10 server that contans "\t" characters in a few lines. How can I get rid of those characters via any command line automated command.

Here is a sample line of the test file:
 
IKOTEST-11690 \tNeed an Album art icon for each video item \t for Letter "H"     15      51208      NULL

I need the output file(same name) that will have the above line replaced by:
IKOTEST-11690 \tNeed an Album art icon for each video item  for Letter "H"      15      51208      NULL

There are tabs in the file (multiple spaces) that I cannot lose.
0
toooki
Asked:
toooki
  • 5
  • 4
  • 3
  • +1
2 Solutions
 
slightwv (䄆 Netminder) Commented:
replacing ALL tabs is easy.

I believe this question is related to your other sql*loader question.

Are you sure you now want to replace ALL tabs?
0
 
Alex MatzingerDatabase AdministratorCommented:
open the file with vi and issue the following command:

:%s/\\t//g

Open in new window

0
 
Alex MatzingerDatabase AdministratorCommented:
Sorry, ignore mine comment...that will erase all \t 's
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
slightwv (䄆 Netminder) Commented:
>>Sorry, ignore mine comment...that will erase all \t 's

That might be OK.  

The other question is here:
http://www.experts-exchange.com/Database/Oracle/Q_26876555.html

They are trying to load a text file with Oralce's sql loader utility.  This allows you to define field delimiters.  They set a TAB as a field delimiter but some of the text has a tab in it.

Instead of vi, I might go with sed so it can be more easily scripted.
0
 
toookiAuthor Commented:
Yes I am trying to remove all "\t" entries in the file...
0
 
Alex MatzingerDatabase AdministratorCommented:
Oh, then yes, my command will remove every \t in the file...as slightvw said, you can also use sed which would look like this(a new file will be created leaving the original intact):

sed 's/\\t//g' < yourfile > newFile

Open in new window


i prefer using vi or vim, but both will work.
0
 
toookiAuthor Commented:
Yes that seems to work. But is there any way to write single command like above to save in the source itself:
sed 's/\\t//g' < myfile > myfile
The above creates empty file.
0
 
Alex MatzingerDatabase AdministratorCommented:
if you have perl on your machine you can use this

perl -e "s/\\t//g" -pi $(find yourFile -type f)

That should do what you are looking for
0
 
Alex MatzingerDatabase AdministratorCommented:
made a minor error in that script it should be single quotes:

perl -e 's/\\t//g' -pi $(find yourFile -type f)

Open in new window

0
 
slightwv (䄆 Netminder) Commented:
tooki,

Is this related to your sql loader question?

http://www.experts-exchange.com/Database/Oracle/Q_26876555.html
0
 
TomuniqueCommented:
You get an empty file because you redirect to it

Command < Input  > Output

The shell prepares the environment to execute  the command, by setting up the file handles, environment variables etc, and THEN executing the program.
In this setup prep, the output is destroyed. (thus, the input is destroyed.)

Try this to "update in place" (not truly update in place, you will get a new inode)

Command < Input > TEMP && mv TEMP Input
 
&& says, execute the next command only if the previous command completed with a return code zero.
&& is a CYA, if Command fails, you save your original, (low on disk space, you don't end up with 1/2  a file -- generally better to not run the cmd, than trunk your file)

0
 
toookiAuthor Commented:
Thank you all.
amatzinger, I could not test the Perl command as I could not find any Perl installed on the server.
And slightwv, it is related to the same SQL Loader problem.
Tomunique' sed syntax worked for me. But the TEMP file I created does not seem to get deleted. That I could delete before the main script but It seems this delete of the TEMP file does not work:
# pwd
/usr2/mydir
#ls -ltr TEMP
-rw-r--r--   1 root     root           8 Mar 12 15:49 TEMP
#cat myscript
#!/bin/sh
D_DIR = /usr2/mydir
/bin/rm -rf "${D_DIR}/TEMP" >/dev/null 2>&1
#chmod 755 myscript
#./myscript
./myscript: D_DIR: not found
#

Why cannot the script find/delete the TEMP file?
0
 
TomuniqueCommented:
don't put spaces around the equal sign...
it things D_DIR is a command

D_DIR=/usr2/mydir   all run together
0
 
toookiAuthor Commented:
Thank you Tomunique! That worked.
0

Featured Post

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

  • 5
  • 4
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now