Visit Our UNIX and Linux User Community


Find lines with "A" then change "E" to "X" same line


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find lines with "A" then change "E" to "X" same line
# 1  
Old 08-22-2013
Find lines with "A" then change "E" to "X" same line

I have a bunch of random character lines like ABCEDFG. I want to find all lines with "A" and then change any "E" to "X" in the same line. ALL lines with "A" will have an "X" somewhere in it. I have tried sed awk and vi editor. I get close, not quite there. I know someone has already solved this one.
# 2  
Old 08-22-2013
Would this work?

Code:
 sed -e '/A/s/E/X/g'

# 3  
Old 08-23-2013
Using awk
Code:
echo "ABCEDFG" | awk '/A/ {gsub("E","X")}1'
ABCXDFG

# 4  
Old 08-23-2013
Is "A" always at the begin of line? Then try:
Code:
sed 's/^\(A[^E]*\)E/\1X/' file

# 5  
Old 08-25-2013
ALL wori (many thanks) However hangs in long file

ALL of the samples you gave me work fine. Many thanks.
I am working with a 500,000 record file, about 18meg, and the commands which work just fine on a small file are hanging on the large one. One has been "running" for two days. I have tried this on both SUN Solaris, and AIX flavors of Unix. Can anyone suggest something? Below are the commands I use. Again, they work just fine on the small test files I have used. It could be the size, or there could be something unique about the data in the larger file. Please help.
I have tried:
Code:
cat sun-file1.xml     | sed -e '/DESCRIPTION=/s/"/@@@"/g' > sun-file2.xml $

and
Code:
sed -e '/DESCRIPTION=/s/"/@@@"/g' <sun-file1.xml >sun-file2.xml


Last edited by Don Cragun; 08-25-2013 at 09:03 PM.. Reason: Added CODE tags
# 6  
Old 08-25-2013
Pleas use code tags as required by forum rules!

Anchoring - if possible - sometimes really speeds things up, as the regex doesn't need to be searched in the whole line but in certain places. So, if "DESCRIPTION" always shows up in a constant position, count that relative to the BOL and use "^" in your regex.

EDIT: And, I guess, it scans lines twice: one for the address (/DESCRITPTION/), and then again for the occurrences of /"/. Maybe you can improve that:
Code:
sed 's/\(DESCRPITION[^"]*\)"/\1@@@"/' file

?

Last edited by RudiC; 08-25-2013 at 04:38 PM.. Reason: typo in command proposal
# 7  
Old 08-25-2013
Sorry about the code tags. Now I understand and will use them in the future.
The first "find" is necessary. I only want to make the change in lines which contain the first "find" field. Once I find a line with "A" I want to change "E" to "X" in the same line. No way to change that (that I know of).
And there is some variation in where the "A" field is found.
I have it working fine in my simple short test file, but the long file it seems to hang on something. Very frustrating, so close and yet so far.

Previous Thread | Next Thread
Test Your Knowledge in Computers #827
Difficulty: Medium
Douglas Crockwell first specified and popularized the JSON format.
True or False?

9 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

3. Shell Programming and Scripting

find . -path "*_nobackup*" -prune -iname "*.PDF" \( ! -name "*_nobackup.*" \)

These three finds worked as expected: $ find . -iname "*.PDF" $ find . -iname "*.PDF" \( ! -name "*_nobackup.*" \) $ find . -path "*_nobackup*" -prune -iname "*.PDF" They all returned the match: ./folder/file.pdf :b: This find returned no matches: $ find . -path "*_nobackup*" -prune... (3 Replies)
Discussion started by: wolfv
3 Replies

4. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

5. Solaris

The slices "usr", "opt", "tmp" disappeared!!! Help please.

The system don't boot. on the screen appears following: press enter to maintenance (or type CTRL-D to continue)...I checked with format command. ... the slices "0-root","1-swap","2-backup" exist. ...the slises "3-var","6-usr" -unassigned. :( (16 Replies)
Discussion started by: wolfgang
16 Replies

6. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

7. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

8. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies

Featured Tech Videos