Convert text to lower case except the strings within single quotes


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Convert text to lower case except the strings within single quotes
# 1  
Old 04-27-2017
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:

Code:
$ cat sample.txt
SELECT  A.LOGIN_ID,A.password,NVL(A.TEMP_PASS_EXPIRY_DT,SYSTIMESTAMP),NVL(UPPER(A.STATUS), ' ')
  INTO V_LOGIN_ID, V_PASSWORD , V_TEMP_PASS_EXPIRY_DT,V_STATUS
  FROM W_DEALER_MASTER A, W_DEALER_USER_MAP B
  WHERE A.LOGIN_ID = I_LOGINID AND B.LOGIN_ID=A.LOGIN_ID AND B.ROLE_ID in ('sysAdmSupervisorR2','sysAdmSalesRepR2');

        IF V_PASSWORD = v_entered_password AND V_STATUS = 'ACTIVE' THEN
                        O_STATUS := 'SUCCESS';
                        O_MESSAGE := null;
                ELSE
                    O_STATUS := 'FAIL';

Expected output:

Code:
select  a.login_id,a.password,nvl(a.temp_pass_expiry_dt,systimestamp),nvl(upper(a.status), ' ')
  into v_login_id, v_password , v_temp_pass_expiry_dt,v_status
  from w_dealer_master a, w_dealer_user_map b
  where a.login_id = i_loginid and b.login_id=a.login_id and b.role_id in ('sysAdmSupervisorR2','sysAdmSalesRepR2');
    
    if v_password = v_entered_password and v_status = 'ACTIVE' then 
            o_status := 'SUCCESS';
            o_message := null;
        else 
            o_status := 'FAIL';

# 2  
Old 04-27-2017
Any attempts / ideas / thoughts from your side?
# 3  
Old 04-29-2017
Hi, John K,
you may try this:

Code:
awk '{ 
           for (i=1; i<=NF; i++ )
                   if ( substr($i, 1, 1) == "\x27" && substr($i, length($i), 1)=="\x27") 
                           printf("%s ", $i);
                   else printf("%s ", tolower($i));
                  
                   printf("\n");

        }' sample.txt

Greetings!
This User Gave Thanks to AbelLuis For This Post:
# 4  
Old 04-30-2017
Hi, AbelLuis.
Quote:
Originally Posted by AbelLuis
Hi, John K,
you may try this:

Code:
awk '{ 
           for (i=1; i<=NF; i++ )
                   if ( substr($i, 1, 1) == "\x27" && substr($i, length($i), 1)=="\x27") 
                           printf("%s ", $i);
                   else printf("%s ", tolower($i));
                  
                   printf("\n");

        }' sample.txt

Greetings!
Unless there is something additional here (or that I missed), this appears to fail if the quoted string is not bounded by whitespace ... cheers, drl

Results:
Code:
select a.login_id,a.password,nvl(a.temp_pass_expiry_dt,systimestamp),nvl(upper(a.status), ' ') 
into v_login_id, v_password , v_temp_pass_expiry_dt,v_status 
from w_dealer_master a, w_dealer_user_map b 
where a.login_id = i_loginid and b.login_id=a.login_id and b.role_id in ('sysadmsupervisorr2','sysadmsalesrepr2'); 

if v_password = v_entered_password and v_status = 'ACTIVE' then 
o_status := 'success'; 
o_message := null; 
else 
o_status := 'fail';

On a system like:
Code:
OS, ker|rel, machine: Linux, 3.16.0-4-amd64, x86_64
Distribution        : Debian 8.7 (jessie) 
awk GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2-p3, GNU MP 6.0.0)


Last edited by drl; 04-30-2017 at 10:29 AM..
These 2 Users Gave Thanks to drl For This Post:
# 5  
Old 04-30-2017
Hi, drl,
this worked on the original sample:

Code:
#!/usr/bin/awk -f

{
n1=match($0, "\x27"); 
n2=match(substr($0, n1+1), "\x27"); 

while ( n1 > 0 ){
    printf("%s", tolower(substr($0, 1, n1-1)));
    printf("%s", substr($0, n1, n2+1));
    $0=substr($0, n1+n2+1);
    n1=match($0, "\x27"); 
    n2=match(substr($0, n1+1), "\x27"); 
}
    print tolower($0);

}

The output was:

Code:
select  a.login_id,a.password,nvl(a.temp_pass_expiry_dt,systimestamp),nvl(upper(a.status),
' ')
into v_login_id, v_password , v_temp_pass_expiry_dt,v_status
from w_dealer_master a, w_dealer_user_map b
where a.login_id = i_loginid and b.login_id=a.login_id and b.role_id
in ('sysAdmSupervisorR2','sysAdmSalesRepR2');
if v_password = v_entered_password and v_status = 'ACTIVE' then
o_status := 'SUCCESS';
o_message := null;
else
o_status := 'FAIL';

Greetings!
This User Gave Thanks to AbelLuis For This Post:
# 6  
Old 04-30-2017
Try
Code:
awk -F"'" -vOFS="'" '{for (i=1; i<=NF; i+=2) $i = tolower($i)} 1 ' file
select  a.login_id,a.password,nvl(a.temp_pass_expiry_dt,systimestamp),nvl(upper(a.status), ' ')
  into v_login_id, v_password , v_temp_pass_expiry_dt,v_status
  from w_dealer_master a, w_dealer_user_map b
  where a.login_id = i_loginid and b.login_id=a.login_id and b.role_id in ('sysAdmSupervisorR2','sysAdmSalesRepR2');

        if v_password = v_entered_password and v_status = 'ACTIVE' then
                        o_status := 'SUCCESS';
                        o_message := null;
                else
                    o_status := 'FAIL';

These 2 Users Gave Thanks to RudiC For This Post:
# 7  
Old 04-30-2017
Try: (GNU sed):
Code:
sed -r "s/([^']*)(('[^']*')?)/\L\1\E\2/g"  file

These 2 Users Gave Thanks to Scrutinizer 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

Convert to lower case based on pattern

Hi Gurus, I am trying to convert some lines in a file based on the patter.Below is an example. Text after cn= and uid: should be converted to lower case. Input: dn: cn=XXX,ou=111,dc=222,dc=333,dc=444 uid: XXX userPassword:: aAbVCeDr dn: cn=XYZ,ou=111,dc=222,dc=333,dc=444 uid: XYZ... (5 Replies)
Discussion started by: Samingla
5 Replies

2. 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

3. Shell Programming and Scripting

Getting only the text from xml file then to lower case.

I have a file with xml code and want to remove everything except the text using awk. So I need to remove anything within "<" and ">" and also the "_". Then changing to lower case except for first letter after a stop "." How can I do it? − <p begin="00:41:16.994" style="1">... (3 Replies)
Discussion started by: kristinu
3 Replies

4. Shell Programming and Scripting

Search replace strings between single quotes in a text file

Hi There... I need to serach and replace a strings in a text file. My file has; books.amazon='Let me read' and the output needed is books.amazon=NONFOUND pls if anybody know this can be done in script sed or awk.. i have a list of different strings to be repced by NONFOUND.... (7 Replies)
Discussion started by: Hiano
7 Replies

5. Shell Programming and Scripting

Convert contents of file to lower case with SED

Hi I what to add option to existing sed code to convert target file to lower case #!/bin/ksh SOURCE_DATA_DEST=/ora TARGET_DATA_DEST=/home/oracle/alexz TARGET_DB_SID=T102_test sed -e "s/REUSE/SET/g" \ -e "s/NORESETLOGS/RESETLOGS/g" \ T102_ccf.sql > target.sql Thanks (2 Replies)
Discussion started by: zam
2 Replies

6. 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

7. 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

8. Shell Programming and Scripting

how to convert from upper to lower case

Hi I am working in ksh and need to convert the following line into lower case: N344 N228 P227 N115 P116 N332 P331 P343 P293 N342 N294 N335 N329 P330 P336 P097 P092 N098 P334 N337 P345 P338 N091 N333 so the output should look like this: n344 n228 p227 n115 p116 n332 p331 p343 p293 n342... (5 Replies)
Discussion started by: aoussenko
5 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 Dummies Questions & Answers

Sed - Lower case single characters

Hello, I have a file where I am supposed to convert all the single i characters to uppercase, but when I try, it converts all the i's inside of words to uppercase as well. I tried doing: cat filename | sed 's/i/I/g' but that obviously does not work. Any help would be greatly... (6 Replies)
Discussion started by: zlindner
6 Replies
Login or Register to Ask a Question