awk and POSIX character class


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk and POSIX character class
# 1  
Old 10-04-2010
awk and POSIX character class

can anyone tell me why this doesn't work? I've been trying to play with character classes and I seem to be missing something here..!

Code:
echo "./comparecdna.summary" | awk '/^[.][/]compare[[:alnum:]+][.]summary$/' # returns nothing
echo "./compare_cdna.summary" | awk '/^[.][/]compare_[[:alnum:]+][.]summary$/' # returns nothing
echo "./compare_cdna_peptide.summary" | awk '/^[.][/]compare_[[_[:alnum:]]+][.]summary$/' # returns nothing
echo "./compare_cdna_peptide.summary" | awk '/^[.][/]compare_[[:word:]+][.]summary$/' # returns: awk: fatal: Invalid character class name: /^[.][/]compare_[[:word:]+][.]summary$/

Thanks!!
Anthony
# 2  
Old 10-04-2010
In reference to your first example:
Code:
$ echo "./comparecdna.summary" | awk '/^[.][\/]compare[[:alnum:]]+[.]summary$/'
./comparecdna.summary

1) You need to escape the the "/" within the regular expression since it's used to delimit the expression itself.
2) [[:alnum:]+] is not the same thing as [[:alnum:]]+
The former matches one character, an alphanumeric or a plus sign; the latter matches 1 or more alphanumerics.

Regards,
Alister
# 3  
Old 10-04-2010
try this,
Code:
echo "./compare_cdna_peptide.summary" | awk '/^\.\/compare_[[:alpha:]].+\.summary$/'

# 4  
Old 10-04-2010
thanks guys,
here's the revised version:

Code:
echo "./comparecdna.summary" | awk '/^[.][/]compare[[:alnum:]]+[.]summary$/' # returns: ./comparecdna.summary
echo "./compare_cdna.summary" | awk '/^[.][/]compare_[[:alnum:]]+[.]summary$/' # returns: ./compare_cdna.summary
echo "./compare_cdna_peptide.summary" | awk '/^[.][/]compare_[_[:alnum:]]+[.]summary$/' # returns: ./compare_cdna_peptide.summary
[:word:] is non-standard POSIX apparently

alister, the "/" seems not need be escaped here, maybe because it's by itself within the []?

pravin27, doesn't "[[:alpha:]].+" means "a letter followed by any characters once or more" ?
# 5  
Old 10-04-2010
Quote:
Originally Posted by anthalamus
thanks guys,
here's the revised version:

Code:
echo "./comparecdna.summary" | awk '/^[.][/]compare[[:alnum:]]+[.]summary$/' # returns: ./comparecdna.summary
echo "./compare_cdna.summary" | awk '/^[.][/]compare_[[:alnum:]]+[.]summary$/' # returns: ./compare_cdna.summary
echo "./compare_cdna_peptide.summary" | awk '/^[.][/]compare_[_[:alnum:]]+[.]summary$/' # returns: ./compare_cdna_peptide.summary
[:word:] is non-standard POSIX apparently

alister, the "/" seems not need be escaped here, maybe because it's by itself within the []?
It is required according to the posix standard. I strongly suggest that you do not depend on your implementation's behavior. Perhaps your awk allows that, but when run on a different implementation it may choke thusly:

Code:
$ echo "./comparecdna.summary" | awk '/^[.][/]compare[[:alnum:]]+[.]summary$/'
awk: nonterminated character class ^[.][
 source line number 1
 context is
         >>> /^[.][/ <<<

AWK thinks it's an unterminated class because the regular expression delimiter is encountered.

For more info, read the "Regular Expressions" section @ awk

Regards,
Alister
This User Gave Thanks to alister For This Post:
# 6  
Old 10-04-2010
wicked, thanks that's gonna be really useful!
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Regex issue with \s in character class.

Anybody have an explanation for why \s doesn't match ' ' in a character class? Here are 3 examples with the final example showing that \s in a character class (demonstrated by using egrep -o) fails: \s works outside of class.. # echo " FOO " | egrep -o '\s+\s' FOO Here is a... (6 Replies)
Discussion started by: blackrageous
6 Replies

2. Programming

C++ : Base class member function not accessible from derived class

Hello All, I am a learner in C++. I was testing my inheritance knowledge with following piece of code. #include <iostream> using namespace std; class base { public : void display() { cout << "In base display()" << endl; } void display(int k) {... (2 Replies)
Discussion started by: anand.shah
2 Replies

3. Shell Programming and Scripting

Match string against character class in bash

Hello, I want to check whether string has only numeric characters. The following code doesn't work for me #!/usr/local/bin/bash if ]]; then echo "true" else echo "False" fi # ./yyy '346' False # ./yyy 'aaa' False I'm searching for solution using character classes, not regex.... (5 Replies)
Discussion started by: urello
5 Replies

4. Programming

Size of Derived class, upon virtual base class inheritance

I have the two class definition as follows. class A { public: int a; }; class B : virtual public A{ }; The size of class A is shown as 4, and size of class B is shown as 16. Why is this effect ?. (2 Replies)
Discussion started by: techmonk
2 Replies

5. UNIX for Advanced & Expert Users

Get pointer for existing device class (struct class) in Linux kernel module

Hi all! I am trying to register a device in an existing device class, but I am having trouble getting the pointer to an existing class. I can create a class in a module, get the pointer to it and then use it to register the device with: *cl = class_create(THIS_MODULE, className);... (0 Replies)
Discussion started by: hdaniel@ualg.pt
0 Replies

6. Programming

static use for class inside the same class c++

Hi, I believe the next code is wrong: class Egg { Egg e; int i; Egg(int ii=0) : i(ii) {} }; because you would end up with an endless definition (memory allocation) of Egg objects, thus int i. Ok, so God Eckel proposes for a singleton: class Egg { static Egg e; int... (5 Replies)
Discussion started by: xavipoes
5 Replies

7. Programming

C++ class definition with a member of the same class

Hi, i have a question about C++. Is it possible to declare a class with a member ot the same class? For example, a linked list or i want to convert this C code to C++ class (Elemento) typedef struct elemento { char name; char value; List<struct elemento> ltElementos; ... (7 Replies)
Discussion started by: pogdorica
7 Replies

8. UNIX for Dummies Questions & Answers

awk and sed class

awk and sed are made for unix admin. does anyone know which company offer awk or sed course ? (3 Replies)
Discussion started by: tjmannonline
3 Replies

9. UNIX for Dummies Questions & Answers

car class (not school class)

im just trying to have some fun and kill some time writing a c++ program that has a person type in a car make and model then gives them a year and a price. or something like that. i always have problems getting it goin but once the ball is rolling im usually pretty good. anyone wanna help me out? ... (1 Reply)
Discussion started by: rickym2626
1 Replies
Login or Register to Ask a Question

Featured Tech Videos