vi Regular Expression help - can this be done?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting vi Regular Expression help - can this be done?
# 1  
Old 04-08-2011
vi Regular Expression help - can this be done?

Good day!
I'll say right away that I'm not good at regular expressions. I'm very much so still learning them and I wasn't sure if this was technically an emergency to post in the emergency forum.

I have a task at work here that requires me to insert a string after matching another string using vi. I plan on learning more about regular expressions so I can use them in vi and work faster... but the deliverable timeframe (eod today Smilie) doesn't allow me time ... so here I am. Smilie

On each line is my search string, in the format of cc11111 where c can be [a-z] and 1 can be [0-9]. Just can't post the actual string here... for example purposes I'll just say it's cc11111

Here's what my example insert string would look like.
Code:
 
,"dd22222","ee33333"

The part that I'm stuck on is that I need to enter my new string at just before the end of the line which contains "}; I need to stick that bugger right in between the " and }. And, I need to do it in vi for auditing purposes. Whatever I try I get substitute pattern match failed. Smilie

Any help is greatly appreciated as it will save me alot of time and typing *nods*
# 2  
Old 04-08-2011
Which vi clone are you using? Unfortunately, their regular expression grammars aren't identical.

Regards,
Alister
# 3  
Old 04-08-2011
Well, use sed and then it is a batch and cron friendly script, just like vi with a :, which is just like ex:
Code:
sed '
  s/} *; *$/'"$YOUR_STRING"'&/
 ' in_file >out_file

# 4  
Old 04-08-2011
if you have a line that end like this :
Code:
cc11111"}

and you want to add
Code:
,"dd22222","ee33333"

so that your final line looks like
Code:
cc11111","dd22222","ee33333"}

When in vi type <ESC> to be "command" mode then

Code:
:/cc111111"/s/cc111111"/&,"dd22222","ee33333"/gc

it will ask you for a confirmation (y or n) before every replacement (if you don't want to be prompt, just remove the c (only g)
This User Gave Thanks to ctsgnb For This Post:
# 5  
Old 04-08-2011
@alister It functions just like normal vi but it's PowerBroker's vi pbvi.

Thanks ctsgnb! cc11111 could be anywhere in the line and it's our standard policy to add everything new at the end. But, that string does pretty close to what I'm trying to do. That alone is exciting!
# 6  
Old 04-08-2011
Code:
:g/"cc111111"/s/}/,"dd22222","ee33333"}/

Can cc111111 b lines ahead of, } ?
Code:
sed '
  /"cc111111"/{
    :loop
    s/}/,"dd22222","ee33333"}/
    t
    N
    b loop
   }
 ' file_in >file_out

sed allows a bit more than vi : g
Once sed finds cc111111, it tries to slip the new entries in front of the }, and if that works, spits it out, but if there is none, it collects following lines in the buffer until it has the } for the substitute to succeed.

Last edited by DGPickett; 04-08-2011 at 02:54 PM..
This User Gave Thanks to DGPickett For This Post:
# 7  
Old 04-08-2011
Guys, seriously, wow... just wow! DGPickett that does exactly what I was looking for.

Unfortuantely I can't use sed, needs to be pbvi for keylogging/tracking purposes. If I was to use something else it would be very bad to say the least. I'd probably lose my job. But, I can use vi and it did EXACTLY what I needed it to when I tested it.

Thank you, thank you, thank you!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Regular expression

I would like to extract "JDBC Thin Client" from (PROGRAM=JDBC Thin Client); and "C:\Python26\python.exe" from (PROGRAM=C:\Python26\python.exe); "txm_v_awsrf_db.pr" from (PROGRAM=txm_v_awsrf_db.pr). if input line like "(PROGRAM=)", it return unknown. Would you help suggest a regular... (4 Replies)
Discussion started by: cstsang
4 Replies

2. Shell Programming and Scripting

Regular expression

Can someone please explain me what does this mean? ^{1,50}$ (1 Reply)
Discussion started by: Anupam_Halder
1 Replies

3. UNIX for Dummies Questions & Answers

Regular expression help

Hi, I am quite knew to scripting and I am trying to get a regular expression to work to check that a user enters a valid version number such as 1 or 1.1 or 12.3 etc. I dont seem to be able to get it to work as it picks up versions such as 1.......2. I only want it to work with a single dot.... (12 Replies)
Discussion started by: frodo61
12 Replies

4. UNIX for Advanced & Expert Users

sed: -e expression #1, char 0: no previous regular expression

Hello All, I'm trying to extract the lines between two consecutive elements of an array from a file. My array looks like: problem_arr=(PRS111 PRS213 PRS234) j=0 while } ] do k=`expr $j + 1` sed -n "/${problem_arr}/,/${problem_arr}/p" problemid.txt ---some operation goes... (11 Replies)
Discussion started by: InduInduIndu
11 Replies

5. Programming

Perl: How to read from a file, do regular expression and then replace the found regular expression

Hi all, How am I read a file, find the match regular expression and overwrite to the same files. open DESTINATION_FILE, "<tmptravl.dat" or die "tmptravl.dat"; open NEW_DESTINATION_FILE, ">new_tmptravl.dat" or die "new_tmptravl.dat"; while (<DESTINATION_FILE>) { # print... (1 Reply)
Discussion started by: jessy83
1 Replies

6. Shell Programming and Scripting

Integer expression expected: with regular expression

CA_RELEASE has a value of 6. I need to check if that this is a numeric value. if not error. source $CA_VERSION_DATA if * ] then echo "CA_RELESE $CA_RELEASE is invalid" exit -1 fi + source /etc/ncgl/ca_version_data ++ CA_PRODUCT_ID=samxts ++ CA_RELEASE=6 ++ CA_WEEK_NO=7 ++... (3 Replies)
Discussion started by: ketkee1985
3 Replies

7. UNIX for Dummies Questions & Answers

ls with regular expression

I currently list and sort all the files in a directory which begin with an Upper Case C and end with the extension '#finished#'. Here is the command I use: ls -tr $currentDir/*.#finished# what i need to do now is list all the files in a directory that begin with upper case C and end... (3 Replies)
Discussion started by: rkgudde
3 Replies

8. Linux

Regular expression to extract "y" from "abc/x.y.z" .... i need regular expression

Regular expression to extract "y" from "abc/x.y.z" (2 Replies)
Discussion started by: rag84dec
2 Replies

9. Programming

What does the regular expression ['(^[^~]+~).*'] mean?

What does the regular expression +~).*'] mean while using it with regexec.When the string "RCHNUSNT35C~rs07/ASM-RS07" is used with the regular expression +~).*'] regexec gives an error. I know what regexec does,but i do not understand what this expression means wrt to this string... any help... (2 Replies)
Discussion started by: anupamar
2 Replies

10. Shell Programming and Scripting

Regular Expression + Aritmetical Expression

Is it possible to combine a regular expression with a aritmetical expression? For example, taking a 8-numbers caracter sequece and casting each output of a grep, comparing to a constant. THX! (2 Replies)
Discussion started by: Z0mby
2 Replies
Login or Register to Ask a Question