Bash Scripting Help to automate replacing multiple lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Bash Scripting Help to automate replacing multiple lines
# 1  
Old 12-18-2012
Bash Scripting Help to automate replacing multiple lines

Background:
I am writing a script to help me automate tweaks and things I apply to a custom Android rom I developed. I am on the very last part of my script, and I am stuck trying to find the right command to do what I seek.

When I build roms from source, a file called updater-script is generated and it always has the signature of the source code's creator. Since I am now building it from source, I have to replace this signature with my own. Also there are a few commands I add in to make some apps uninstallable.

What I am looking for:
I want to automate the text replacement. I have created two files, one is called findsts and the other replaceccore.

findsts contains the signature that is ALWAYS in the updater-script. I want to use this file to tell the command I am to use that that is the selection I want replaced.

replaceccore has my signature and will eventually have commands to replace text in the updater-script, but for now I just want the signature replaced with the data in this file.

I first thought sed was the answer, but soon found that sed doesn't like variables, but rather would use literal strings. I was then referred to awk. Awk seems to be a very powerful command, but I have yet to see how it will help me in my current situation. I also know that the signature that i am finding and replacing has tons of special characters, including parenthesis, semi colons, and quotations. This also poses a problem because now not only do I need to figure out the correct command, but then how to tell it to use these files in a literal way and not try to interpret the commands in the file.

The details:

findsts contains:
Code:
ui_print("************************************************");
ui_print("*                                              *");
ui_print("*            STS-Dev-Team presents             *");
ui_print("*                                              *");
ui_print("*         JELLY BEAN for OMAP4 devices         *");
ui_print("*                                              *");
ui_print("*     Follow us  @dhacker29 and @hashcode0f    *");
ui_print("*        Get the GApps at goo.im/gapps         *");
ui_print("*                                              *");
ui_print("************************************************");
ui_print(" ");

replaceccore contains:
Code:
ui_print("*************************");
ui_print("*       CyanCore        *");
ui_print("*                       *");
ui_print("*   Brought to you by:  *");
ui_print("*    Team SpeedCore     *");
ui_print("*                       *");
ui_print("*    <-Developers->     *");
ui_print("*       2tealth         *");
ui_print("*     Silverlink34      *");
ui_print("*                       *");
ui_print("*<Performance Optimizer>*");
ui_print("*      The Doctor       *");
ui_print("*        Taecon         *");
ui_print("*************************");
ui_print(" ");

Here is a small part of updater-script, the file I actually am trying to edit, from the beginning of the file:

Code:
mount("ext3", "EMMC", "/dev/block/system", "/system");
package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");
package_extract_file("system/bin/backuptool.functions", "/tmp/backuptool.functions");
set_perm(0, 0, 0777, "/tmp/backuptool.sh");
set_perm(0, 0, 0644, "/tmp/backuptool.functions");
run_program("/tmp/backuptool.sh", "backup");
unmount("/system");
show_progress(0.500000, 0);
ui_print("************************************************");
ui_print("*                                              *");
ui_print("*            STS-Dev-Team presents             *");
ui_print("*                                              *");
ui_print("*         JELLY BEAN for OMAP4 devices         *");
ui_print("*                                              *");
ui_print("*     Follow us  @dhacker29 and @hashcode0f    *");
ui_print("*        Get the GApps at goo.im/gapps         *");
ui_print("*                                              *");
ui_print("************************************************");
ui_print(" ");
ui_print("Wiping cache...");
mount("ext3", "EMMC", "/dev/block/cache", "/cache");
delete_recursive("/cache");
ui_print("Wiping dalvik-cache...");
mount("ext3", "EMMC", "/dev/block/userdata", "/data");
delete_recursive("/data/dalvik-cache");
ui_print("Mounting your system...");
mount("ext3", "EMMC", "/dev/block/system", "/system");
ui_print("Deleting old system files...");
delete_recursive("/system");
ui_print("Starting Installation...");

If it makes a difference I know the developers who provide the source code and they are okay with other developers building roms from source and customizing it.

Thank you for reading. I hope this is not too complicated a task or annoying. I have been searching for a few days and finally broke down and decided to ask. Please be merciful Smilie

Edit:
So if sed actually worked this way, I would set it up like this:

Code:
sts=findsts
ccore=replaceccore
sed -i "s/$sts/$ccore/g' updater-script

but it doesn't, so here I am, back at the drawing board.

Last edited by joeyg; 12-18-2012 at 04:25 PM.. Reason: more detail
# 2  
Old 12-18-2012
Need more info

What comes to mind is to delete these ui_print lines, and then copy in some new ui_lines.
However, without seeing more of the code, hard to say. For instance, are these ui_print lines always only eleven lines, and occurring at the same point?
# 3  
Old 12-18-2012
In updater-script, the 11 line STS Team signature always is present on the 8th line, unless the rom base does not use the backup tool. In that case, the STS Team signature would start on line 2, after the show progress command.
# 4  
Old 12-18-2012
One thing that comes to mind is..

Code:
head -7 myfile.txt

will extract the first 7 lines
Code:
tail -n +18 myfile.txt

will extract beginning at line 18

So, assuming you have your new message in a file called new.txt, you could do something like:
Code:
head -7 myfile.txt >t1.txt
tail -n +18 myfile.txt >t2.txt
cat t1.txt new.txt t2.txt >newfile.txt

This User Gave Thanks to joeyg For This Post:
# 5  
Old 12-18-2012
sed s command works on strings, not input files!
Further, the strings are regular expressions - not wanted here.

But there are other Unix tools:
Code:
diff findsts replacecore > patchfile
patch update-script patchfile

If you don't want the intermediate patchfile:
Code:
diff findsts replaceccore | patch updater-script

This User Gave Thanks to MadeInGermany For This Post:
# 6  
Old 12-18-2012
Quote:
Originally Posted by MadeInGermany
sed s command works on strings, not input files!
Further, the strings are regular expressions - not wanted here.

But there are other Unix tools:
Code:
diff findsts replacecore > patchfile
patch update-script patchfile

If you don't want the intermediate patchfile:
Code:
diff findsts replaceccore | patch updater-script

This looks promising. I know now that sed likes literal strings and not input files Smilie. I love learning code and am excited that there is a community here willing to share their knowledge when I have problems finding it on my own.

@Joeyg, I like your approach as well, this helps me to understand some more commands. Does the head and tail commands used in this context copy the selected lines to files t1 and t2, and then im a little lost what the cat command does to mytext.txt and newfile.txt, assuming that new.txt has the information in my replaceccore file.

---------- Post updated at 06:45 PM ---------- Previous update was at 06:32 PM ----------

Code:
diff findsts replaceccore | patch updater-script

This worked like a charm!

---------- Post updated at 06:55 PM ---------- Previous update was at 06:45 PM ----------

Will diff let me use functions?

Such as:
Code:
sts=~/dir/findsts
ccore=~/dir/replaceccore
oldsig=~/diffdir/updater-script
diff $sts $ccore | patch $oldsig

# 7  
Old 12-18-2012
That is not a function, that is a variable.

Any shell program at all can use those, because that's the shell's job, not the program's.
This User Gave Thanks to Corona688 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

BASH - Regular Expressions :Looking for one word on multiple lines.

Im looking for a bash solution that will use Regular Expressions (not perl, sed or awk) to check the example data below and then give me a status. which would be just simply Match or Mismatch. SYS PS1 is present. Fan status: Normal Input Voltage status: Normal ... (5 Replies)
Discussion started by: popeye
5 Replies

2. Shell Programming and Scripting

Automate an application using scripting, managing multiple terminals

Hi I am new to Ubuntu and Bash scripting. I am working on a project to give a demo on an SDN application to my class. I need some help in scripting to create the demo. Please help in case if you have any idea on what am asking. The demo uses a tool called mininet. I need just one script so... (2 Replies)
Discussion started by: anzal
2 Replies

3. Shell Programming and Scripting

Replacing a single line with multiple lines in a file

Hi Am confused with the usage of "sed" command I want to replace a single line with multiple lines of a file.. eg., A file has Hi, How are you? I need to replace as Am fine What are You doing? I used the script as string1="Hi, How are you?" echo "$string1 is the value"... (4 Replies)
Discussion started by: Priya Amaresh
4 Replies

4. Shell Programming and Scripting

Replacing System.out.println with Logger.println in *.java using SED (spanned over multiple lines)

Hi, Can anyone help me out for my below problem. I need to replace all System.out.println with Logger.println in *.java using SED (spanning multiple lines) including current & sub-directories. I tried with below command. But it is not replacing when source text is spanned over multiple... (4 Replies)
Discussion started by: Bhanu Dhulipudi
4 Replies

5. Shell Programming and Scripting

searching multiple lines and replacing in shell scripting

Hi, I have a file with below contents, ssenthil = rw anilkg = rw I want to search for "ssenthil" and need to delete line 1 and 2 , if the third line starts with "" respectively and blank line immediately and third line starts with " anilkg = rw Please help me . Great day... (5 Replies)
Discussion started by: anil8103
5 Replies

6. Shell Programming and Scripting

Replacing pattern spanning multiple lines

Hi. I have input like this: <tr> <td class="logo1" rowspan="2"><a href="index.html"><img src="images/logo.png" /></a></td> <td class="pad1" rowspan="2">__</td> <td class="userBox"><img src="images/person.png"/> <a href="http://good.mybook.com/login.jsp">Sign In</a></td> <td... (5 Replies)
Discussion started by: zorrox
5 Replies

7. Shell Programming and Scripting

BASH: extracting values from multiple lines after a match

Hi there, I have the following output, # raidctl -l RAID Volume RAID RAID Disk Volume Type Status Disk Status ------------------------------------------------------ c0t1d0 IM OK c0t1d0 OK ... (4 Replies)
Discussion started by: rethink
4 Replies

8. Shell Programming and Scripting

bash scripting: using multiple 'for loops'??

Hey guys, I'm kinda a noob at scripting. I am trying to create a script that uses multiple for loops with the lsiutility to monitor disk health on a system. The script runs, but it will continually echo an infinite number of LogVolumes when there are only 2 per virtual disk on my server. It's... (2 Replies)
Discussion started by: tank126
2 Replies

9. Shell Programming and Scripting

replacing multiple lines with single line

Can any one give me the idea on replacing multiple blank lines with a single blank line? Please conside it for a file having more than 100 number of characters. Regards, Siba (3 Replies)
Discussion started by: siba.s.nayak
3 Replies

10. Shell Programming and Scripting

replacing multiple lines

i have a file : sample1.txt OBJECT="POINT" ACTION="REDEFINE" POINT_NAME="ABCD001G " GHYT_POPRIORITY_1="1" GHYT_POPRIORITY_2="1" GHYT_POPRIORITY_3="1" GHYT_POPRIORITY_4="1" GHYT_POPRIORITY_USER="1" HIGH_ALARM_PRIORITY_1="1" HIGH_ALARM_PRIORITY_2="1" HIGH_ALARM_PRIORITY_3="1" ... (1 Reply)
Discussion started by: ajnabi
1 Replies
Login or Register to Ask a Question