Convert text between exact matching patterns to Title case


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Convert text between exact matching patterns to Title case
# 8  
Old 02-11-2016
And, in those cases, what is supposed to happen? Does capitalization start with the first string and continue until the second string is seen on a subsequent line, or is capitalization only performed between an occurrence of the first string up to the next occurrence of the second string that appears on the same line.

And, on a line like:
Code:
title=">PATTERN1 tokyo city whatever whatever title=">PATTERN1 london PATTERN2

is the output supposed to be:
Code:
title=">PATTERN1 Tokyo City Whatever Whatever Title=">PATTERN1 London PATTERN2

or:
Code:
title=">PATTERN1 tokyo city whatever whatever title=">PATTERN1 London PATTERN2

This User Gave Thanks to Don Cragun For This Post:
# 9  
Old 02-11-2016
Would any of these do it?
Code:
perl -ple '$cl=$_; while(/title=">PATTERN1\s+(.*?)\s+PATTERN2/g){$opt=$mpt=$&; $os=$ms=$1; $ms=~s/\b(\w)/\U$1/g; $mpt=~s/$os/$ms/; $cl=~s/$opt/$mpt/}$_=$cl' patterns.file

Code:
perl -ne '$cl=$_; while(/title=">PATTERN1\s+(.*?)\s+PATTERN2/g){$opt=$mpt=$&; $os=$ms=$1; $ms=~s/\b(\w)/\U$1/g; $mpt=~s/$os/$ms/; $cl=~s/$opt/$mpt/} print $cl' patterns.file


Last edited by Aia; 02-11-2016 at 11:40 PM.. Reason: Add a second one-liner
This User Gave Thanks to Aia For This Post:
# 10  
Old 02-11-2016
Quote:
Originally Posted by Don Cragun
or:
Code:
title=">PATTERN1 tokyo city whatever whatever title=">PATTERN1 London PATTERN2

That's the result i needed. ( with capitalization only performed between an occurrence of the first string up to the next occurrence ) Thank you Don!.
The perl solution from Aia solved the issue.

Code:
PATTERN2 whatever goes to tokyo city ....title=">PATTERN1 tokyo city PATTERN2 whatever whatever whatever title=">PATTERN1 london PATTERN2 whatever whatever whatever title=">PATTERN1 new york PATTERN2 whatever whatever whatever ....

Code:
perl -ple '$cl=$_; while(/title=">PATTERN1\s+(.*?)\s+PATTERN2/g){$opt=$mpt=$&; $os=$ms=$1; $ms=~s/\b(\w)/\U$1/g; $mpt=~s/$os/$ms/} $cl=~s/$opt/$mpt/};$_=$cl' patterns.file

Result:
Code:
PATTERN2 whatever goes to tokyo city ....title=">PATTERN1 Tokyo City PATTERN2 whatever whatever whatever title=">PATTERN1 London PATTERN2 whatever whatever whatever title=">PATTERN1 New York PATTERN2 whatever whatever whatever

Cheers Aia! Smilie

Thanks a lot for everyones help.Smilie
# 11  
Old 02-12-2016
I'm confused.

You said that with the input:
Code:
title=">PATTERN1 tokyo city whatever whatever title=">PATTERN1 london PATTERN2

you want the output:
Code:
title=">PATTERN1 tokyo city whatever whatever title=">PATTERN1 London PATTERN2

and you said that Aia's perl script does exactly what you want. But both of Aia's perl scripts produce the following output from that input:
Code:
title=">PATTERN1 Tokyo City Whatever Whatever Title=">PATTERN1 London PATTERN2

I'm not nearly as good at writing perl scripts as Aia is, but the following awk script seems to do what you have requested for every output you have specified with various sample inputs:
Code:
awk '
BEGIN {	OFF = "PATTERN2"
	ON = "title=\">PATTERN1"
}
{	n = on = 0
	for(i = 1; i <= NF; i++)
		if($i == ON) {
			if(!on)	n++
			on = 1
			start[n] = i + 1
		} else if($i == OFF) {
			if(on) {
				on = 0
				stop[n] = i - 1
			}
		}
	if(on)	n--
	for(i = 1; i <= n; i++)
		for(j = start[i]; j <= stop[i]; j++)
			$j = toupper(substr($j, 1, 1)) substr($j, 2)
}
1' file

As always, if you want to try this on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk or nawk. I'm guessing this still doesn't really do what you want, but you still haven't given us a complete specification for what happens when the three patterns you showed us in your original post in this thread are not paired as shown in the examples in that post.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Convert text to lower case except the strings within single quotes

Shell : bash that comes with RHEL 6.7 I have SQL scripts like below. I want to convert all the text in these files to lower case except the strings enclosed within single quotes . Any idea how I can achieve this ? Sample text: $ cat sample.txt SELECT ... (6 Replies)
Discussion started by: John K
6 Replies

2. Shell Programming and Scripting

Help need to convert bi-lingual files in sub-title format

I have a large number of files in the standard subtitle format with the additional proviso that the files are bi-lingual i.e. English and a second language: in this case Hindi. A small sample is given below: 00 04 07 08 00 04 11 00 I mean very high fever... He even vomited. 00 04 07 08 00... (6 Replies)
Discussion started by: gimley
6 Replies

3. UNIX for Advanced & Expert Users

Shell script to convert words to Title case

Hi :) I have a .txt file with thousands of words. I was wondering if i could use a simple sed or awk command to convert / replace all words in the text file to Title Case format ? Example: from: this is line one this is line two this is line three to desired output: This Is Line... (8 Replies)
Discussion started by: martinsmith
8 Replies

4. UNIX for Dummies Questions & Answers

To convert Lower case to Upper Case

There is a script where we pass the parameter in lower case: say: . ./scriptName pArameter #!/bin/ksh echo "`date` Entering $0 Reloading the $1 table " mname1=$1 (code to login MYSQL Database) Truncate table $mname1; exit ! Since now there is a limitaion of MYSQL that it accept... (5 Replies)
Discussion started by: ambarginni
5 Replies

5. Shell Programming and Scripting

Matching and replacing text with case transformations

Hi, I am trying to edit an XML file automatically but my regex and shell script knowledge is very limited. I would appreciate your help fellows. The XML file has this structure: <?xml version="1.0" encoding="UTF-8"?> <map map_file="maps/world.swf" zoom="350%" zoom_x="-115%"... (1 Reply)
Discussion started by: boonymagique
1 Replies

6. Shell Programming and Scripting

Perl - Title Case after apostrophe

I've got: $string =~ s/(\w+)/\u\L$1/g; Which capitalizes each word in the string. The problem is if I have a string with an apostrophe the first letter after it gets capitalized as well. So Bob's becomes Bob'S. Thanks for any quick fixes! (4 Replies)
Discussion started by: mjmtaiwan
4 Replies

7. Shell Programming and Scripting

Script to Convert Upper case to Lower case

Hi All I have a script which extracts values from a Database (A persons name) and puts it into a variable in my script IE: $NAME However the Value in the DB is all in uppercase and contains the users first name and last name EG: > echo $NAME GRAHAM BOYLE > What I need is only the... (7 Replies)
Discussion started by: grahambo2005
7 Replies

8. Shell Programming and Scripting

convert upper case to lower case in ascript

I have a package to install and the installation script which does it . The files/directories names in the script are all lower case but the actual package has everything in upper case - file names, directories . I don't want to rename directories and files in the package - it has a lot of them . ... (2 Replies)
Discussion started by: vz6zz8
2 Replies

9. Shell Programming and Scripting

how to convert value in a variable from upper case to lower case

Hi, I have a variable $Ctrcd which contains country names in upper case and i want to convert them into lower case. I have tried so many solutions from already existing threads but couldn't get the correct one. Can anybody help me with this..... Thanks a lot.. (2 Replies)
Discussion started by: manmeet
2 Replies

10. UNIX for Advanced & Expert Users

Shell script to convert to Title case

I need a shell script which will convert the given string to Title case. E.g "hi man" to "Hi man" (5 Replies)
Discussion started by: SankarV
5 Replies
Login or Register to Ask a Question