Regular expression with sed


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Regular expression with sed
# 1  
Old 10-21-2008
Regular expression with sed

Hi,

I'm trying following:
Code:
echo "test line XA24433 test" | sed 's/.*X\(.*[^ ]\)/X\1/'
XA24433 test

While I want the output as: XA24433

I want to grab the words starting with letter X till the next space, this word can be anywhere in the line.
# 2  
Old 10-21-2008
Code:
echo "test line XA24433 test" | sed 's/.*X\(.*[^ ]\)/X\1/'|awk '{print $1}'

# 3  
Old 10-21-2008
Code:
% echo "test line XA24433 test" | sed 's/.*\(X[^ ]*\).*/\1/'
XA24433

Or (if you have more than one X on the line and you want the first one):

Code:
sed 's/[^X]*\(X[^ ]*\).*/\1/'

With zsh:

Code:
% s="test line XA24433 test"
% print ${(M)${(z)s}:#X*}
XA24433


Last edited by radoulov; 10-21-2008 at 11:06 AM.. Reason: added zsh
# 4  
Old 10-21-2008
Thanks for your answers, last solution is perfect, I need some more assistance, file format is as follows:
Code:
ADMDN13EX84447619,"HUMMER H3 SUV, LEATHER SEAT",XAWBG020209,m,Kuwaiti,M,13/05/1969,39,Block Building

I need XAWBG020209 from this line, I can't use awk because sometimes XA string is in the third column, my part numbers are starting with XA or XG, I want to take these part numbers then lookup in another file acc.csv which contains the description of these parts, I want to match part number extracted from this line with that part number and show the description, I wanted to do it by myself but since 3 hours I'm not able to figure out anything.

Second file is properly formatted, few lines from that file are as follows:
Code:
XG96470024,04-05OP WHEEL (ALLOY)
XG96545706,05OP SPOILER A-RR# HB
XG96635210,EPICA SPOILER KIT-V250
XG96635230,EPICA BODY KIT-V250
XG96654234,"AVEO TIP A-EXHAUST,TAIL - T -2"
XG96664463,07EP BLUETOOTH
XG96806104,07EP REAR SPOILER
XG96806220,07EP BODY KIT
XG96816783,07EP EXHAUST TIP
XGCHCAP71,CHROME PACKAGE CAPRICE 08

Your help would be appreciated.

Last edited by nervous; 10-21-2008 at 11:19 AM..
# 5  
Old 10-21-2008
ok, so lets build a regex then:

so long as the part number isn't going to be in the first column and it is always going to be followed by a comma then it is fairly easy (when you know how <grin>)

/.*,X[AG][a-zA-Z0-9]*,.*/

should match want you want, and to pull out the part number part just surround it with () and use \1 as the replace parameter:

/.*,\(X[AG][a-zA-Z0-9]*\),.*/

Code:
echo 'ADMDN13EX84447619,"HUMMER H3 SUV, LEATHER SEAT", \
XAWBG020209,m,Kuwaiti,M,13/05/1969,39,Block Building' \
|sed 's/.*,\(X[AG][a-zA-Z0-9]*\),.*/\1/'


Last edited by wempy; 10-21-2008 at 11:29 AM.. Reason: syntax correction
# 6  
Old 10-21-2008
Code:
awk -F, 'NR == FNR {
  for (i=1; i<=NF; i++)
    if ($i ~ /^X[AG]/) {
      _[$i]
      break
    }
  }
$1 in _' first_file acc.csv

With GNU grep and process substitution (if available) you may write something like this:

Code:
grep -f  <(grep -o 'X[AG][^,]*' first_file) acc.csv

# 7  
Old 10-21-2008
Process substitution is available in ksh, zsh, and bash on OSes that have /dev/fd
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed regular expression

Hi , I need to remove pipe character from a |^ delimeted file. Something like |^tran|sformers||^|revenge |of fallen|^ to |^transformers|^revenge of fallen|^... Cold anybody please help to build the regular expression using sed . many thanks. Please use code tags next time for... (1 Reply)
Discussion started by: kokjek
1 Replies

2. Shell Programming and Scripting

I am learning regular expression in sed,Please help me understand the use curly bracket in sed,

I am learning SED and just following the shell scripting book, i have trouble understanding the grep and sed statement, Question : 1 __________ /opt/oracle/work/antony>cat teledir.txt jai sharma 25853670 chanchal singhvi 9831545629 anil aggarwal 9830263298 shyam saksena 23217847 lalit... (7 Replies)
Discussion started by: Antony Ankrose
7 Replies

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

4. Shell Programming and Scripting

Help with sed regular expression

Hi all, I want to get a substring from a string based on given delimiter, for example: str="foo|bar|baz" with delimiter "|", I want to get one substring at each time with the order number the substring in the whole string, given 1 to get "foo", given 2 to get "bar", given 3 to get "baz", I... (2 Replies)
Discussion started by: Roy987
2 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. UNIX for Dummies Questions & Answers

Regular Expression In Sed

Hi , I am learing sed echo abc 123 def 456 | sed 's|\(*\) \(*\)|\1|' is returning abc def 456 i was hoping abc def "\1" should only print the occurence of the first pattern but according to my understanding it is just removing the first occurence of the second pattern... (7 Replies)
Discussion started by: max_hammer
7 Replies

7. Shell Programming and Scripting

sed regular expression help

please consider this: echo "11111*X*005010X279~ST*270*1111111*005010X279~BHT*0011*11" | sed 's/.*\(005010X(\d)(\d)(\d)*\).*$/\1/'i'm searching for first occurrence of 005010X while leaving rest of characters out. :confused: any tips? thnx in advance guys. (7 Replies)
Discussion started by: grep01
7 Replies

8. Shell Programming and Scripting

Regular expression (sed)

Hi I need to get text that are within "" For example File: asdasd "test test2" sadasds asdda asdasd "demo demo2" Output: test test2 demo demo2 Any help is good Thank you (12 Replies)
Discussion started by: blito_loco
12 Replies

9. Shell Programming and Scripting

Regular expression with SED

Hi! I'm trying to write a regexp but I have no luck... I have a string like this: param1=sometext&param2=hello&param3=bye Also, the string can be simply: param2=hello I want to return the value of param2: "hello". How can I do this? Thanks. (3 Replies)
Discussion started by: GagleKas
3 Replies
Login or Register to Ask a Question