Insert character at specific location in a each line of the file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Insert character at specific location in a each line of the file
# 8  
Old 10-06-2016
Hi greet,

Yeah. Now its working. Thanks a lot. You told me i can edit and save the file with the option -i. Could you please let me know how to do that.

Thanks a lot for your help. Below is the code and output.

Code:
echo "Program Begin" 
for file in *.txt
do
echo "File Name=" $file
sed '1n;$!s/./&a/10' $file
done
echo "Program End"

Output
Code:
Program Begin
File Name= abc.txt
abcdefghij klmnop  qrstuvwxyz
1234567891a0 11 12 13 14 15 16
ABCDEFGHIJaKLMNOPQRSTUVWZYZ
1234567891a0 11 12 13 14 15 16
12345678910 11 12 13 14 15 16
File Name= def.txt
abcdefghij klmnop  qrstuvwxyz
1234567891a0 11 12 13 14 15 16
ABCDEFGHIJaKLMNOPQRSTUVWZYZ
1234567891a0 11 12 13 14 15 16
12345678910 11 12 13 14 15 16
Program End


Last edited by Don Cragun; 10-06-2016 at 10:40 PM.. Reason: Change QUOTE tags to CODE tags for sample output.
# 9  
Old 10-06-2016
Good that it works with last change.

to make inplace/infile edit , use
Code:
sed -i '1n;$!s/./&a/10' $file

If you want to save a backup / copy of the file before modifying it, use
Code:
sed -i.bak '1n;$!s/./&a/10' $file

After execution of above command with -i.bak option, you have 2 files now.
1) before modification with .bak extension.
2) Modified file by sed command .

Last edited by greet_sed; 10-06-2016 at 08:19 PM.. Reason: Add text
This User Gave Thanks to greet_sed For This Post:
# 10  
Old 10-06-2016
Hi greet,

With option -i, its not working..i get below error.

Code:
$ sh test2.prog
Program Begin
File Name= abc.txt
sed: illegal option -- i
Usage:  sed [-n] [-u] Script [File ...]
        sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]
File Name= def.txt
sed: illegal option -- i
Usage:  sed [-n] [-u] Script [File ...]
        sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]
Program End

Thanks
Bharat

---------- Post updated at 03:34 PM ---------- Previous update was at 03:21 PM ----------

I tried it using another option. and it seems working. Thanks a lo for your help. Below is the code i tried.

Code:
for file in /home/user/bharat/*.RET
do
echo "File Name=" $file

l_fileName=`basename ${file}`_II

mv $file $l_fileName

echo "New File Name=" $file

sed  '1n;$!s/./&I/180' $l_fileName>$file

mv -f $l_fileName /home/user/bharat/archive

done


Last edited by Don Cragun; 10-06-2016 at 10:41 PM.. Reason: Change QUOTE tags to CODE tags for code segment.
# 11  
Old 10-07-2016
If we just stick with standard sed addressing constructs and do not depend on non-standard options, you could try something more like:
Code:
#!/bin/ksh
IAm=${0##*/}
tmpf="$IAm.$$"

trap 'rm -f "$tmpf"' EXIT

cd /home/user/bharat
for file in *.RET
do	printf 'File Name=%s\n' "$file"
	sed -e 1n -e '$n' -e 's/./I&/180' "$file" > "$tmpf" && cp "$tmpf" "$file"
done

Note that your description talks about INSERTING a character in the 180th position which I interpret to mean "insert a character before the 180th character on the existing line" while none of your sample input files have 180 characters in any line and all of the samples that have shown examples using character position 10 instead of 180 have been "appending a character after the 10th character" instead of "inserting a character before the 10th character. The above code attempts to "insert a character before the 180th character on lines 2 through n-1, inclusive, for a file that contains n lines.

The code samples you have shown unconditionally move the output produced by sed to the input file whether or not sed succeeded or failed. The above code only modifies the input file if the sed command completes successfully. Furthermore, it copies the updated file back to the original file (which preserves file permissions and hard links) while the moves used by your script will break any hard links to your input files and may destroy the contents of your input file if sed fails for any reason.

Hopefully, this will work better for you.

Note that it is always a good idea to tell us what operating system and shell you're using so the volunteers here trying to help you can avoid suggestions that won't work in your environment.

The previous script was written and tested using a Korn shell, but will work with any shell that is based on Bourne shell syntax and performs parameter expansions required by the POSIX standards (such as ash, bash, dash, ksh, and zsh).
This User Gave Thanks to Don Cragun For This Post:
# 12  
Old 10-07-2016
Hi Don,

Thanks for your detailed explanation and solution. I will try this approach and update you.

Thanks
Bharat
# 13  
Old 10-20-2016
Hi Don,

I tested this and works perfectly fine. I have one more requirement with the same operation. If 180th position already have character "I". i do not want to touch that file. I am not getting how to handle that with sed.

Any help is highly appreciated.

Thanks
Bharat
# 14  
Old 10-20-2016
Don't touch that file or line?
This User Gave Thanks to RudiC For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How to insert new line after a specific character in scripts?

Hi, I'm trying to add a new line after finding a specific String. That is my string: volumes: - ${DIR_WORK}/loadbalancer/html:/var/www/html and I want to change that file to: volumes: - ${DIR_WORK}/loadbalancer/html:/var/www/html extra_hosts: -... (4 Replies)
Discussion started by: siamak
4 Replies

2. Shell Programming and Scripting

Count specific character of a file in each line and delete this character in a specific position

I will appreciate if you help me here in this script in Solaris Enviroment. Scenario: i have 2 files : 1) /tmp/TRANSACTIONS_DAILY_20180730.txt: 201807300000000004 201807300000000005 201807300000000006 201807300000000007 201807300000000008 2)... (10 Replies)
Discussion started by: teokon90
10 Replies

3. Shell Programming and Scripting

Removing last character of a specific line from a file

Hello guys, I would need to remove the last character ")" of a specific line. This can be from any line. Your help is appreciated. Below is the line. HOSTNAME=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)) Please help. (6 Replies)
Discussion started by: sang8g
6 Replies

4. Solaris

Insert a file at specific line

Hi, Anyone can help me in Solaris command on how to insert a file at specific line. I want file1.sql content to be inserted on file2.sh after "recover database using backup controlfile until cancel". # file1.sql /archivelogs/927_822338133.arc /archivelogs/671_822338107.arc... (3 Replies)
Discussion started by: fspalero
3 Replies

5. Shell Programming and Scripting

Insert text line to specific location CSV

In Perl. ***edited question below*** Hey all, I am teaching myself some simple CSV file manipulation and have become a little stuck. Say I have the following layout in the CSV file: age,name,locationIs it possible to INSERT data into the CSV into the correct age order. For example, if I had... (1 Reply)
Discussion started by: whyte_rhyno
1 Replies

6. Shell Programming and Scripting

Help with replace character based on specific location

Hi, I got long list of reference file (column one is refer to the header in input file; column 2 is info of start position in input file; column 3 is info of end position in input file;) shown as below: read_2 10 15 read_3 5 8 read_1 4 10 . . . Input file (huge file with total... (6 Replies)
Discussion started by: perl_beginner
6 Replies

7. Shell Programming and Scripting

Insert character in a specific position of a file

Hi, I need to add Pipe (|) at 5th and 18th position of all records a file. How can I do this? I tried to add it at 5th position using the below code. It didnt work. Please help!!! awk '{substr($0,5,1) ~ /|/}{print}' $input_file > $temp_file (1 Reply)
Discussion started by: gpaulose
1 Replies

8. Shell Programming and Scripting

Replace, insert n times a specific character

How can using Vim, replace one character with another repeating it 10 times? Ex.: Transforming this: 125A986 That: 125##########986 (12 Replies)
Discussion started by: IJNeves
12 Replies

9. Shell Programming and Scripting

Insert 2 lines in a file at a specific location

Hi, I need to insert two new lines in a file: The file: "..... ...... ULIMIT_MAX_FILES="ulimit -S -n `ulimit -H -n`" .... .... " I need to add the lines: LD_LIBRARY_PATH='$LD_LIBRARY_PATH:$APACHE_HOME/modules' DOWNLOADMODULE_CONF_PATHNAME='$APACHE_HOME/conf/DWLModule.cfg' right... (2 Replies)
Discussion started by: potro
2 Replies

10. Shell Programming and Scripting

Insert lines at specific location in file

Hi There I have this file that I would like to add entries to, however, there is a "}" as the last line that I need to keep. Basically i would like to know how I can write a script that will add new lines at the second to last line position (ie always add new line above the close bracket) ... (17 Replies)
Discussion started by: hcclnoodles
17 Replies
Login or Register to Ask a Question