Need help deciphering this


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Need help deciphering this
# 1  
Old 04-27-2010
Need help deciphering this

I'm reading about command substitutions and came across this little function in my book:

function lsd
{
date=$1
ls -l |grep -i "^.\{42\}$date"|cut -c55-
}

it's a little example which is supposed to select files by modification date, given as an argument to the function.

I can't figure out what the ^, ., and \{42\} means. The book says that the function tells UNIX to match any line that contains 41 characters followed by the function argument, with the date starting in column 42, then only printing the filenames, which start in column 55, but like I said I don't know what these symbols mean (or how they 'translate'). The only thing I've found about the ^ so far is that it's a 'word designator' but I'm not sure if that applies here.

I'm also not sure how to translate the .\{42\} either.

By the way, how do I find out what the column layout for the ls -l command is? (if I've phrased that correctly), that is, what column each part of the listing begins at?
# 2  
Old 04-27-2010
It's a regular expression

^ means at the beginning of a line in some data
. means Any character
\{42\} means 42 of those any characters

If that . was an A or a B, \{42\} would mean 42 A's or B's.

so that line is looking for a pattern ^ (at the beginning of a line) with \{42\} characters of . (any character).
# 3  
Old 04-28-2010
Can you tell me why the brackets are backslashed?

Oh, and while I'm here, the man pages state that the ^ is for the 'empty string' at the beginning of a line. can you tell me what 'empty string' is and how it relates to the carat here? (Did I ask that right?)
# 4  
Old 04-28-2010
Hi.

The brackets (braces) are backslashed to give them special meaning (they would otherwise be literal braces).

^ matches something at the beginning of the line (an empty string because it doesn't remove anything from the pattern space), but has special meaning if it's the first character after a square braclet [ (in which case it negates the match (i.e. ^[0-9] means match a number at the start of a line, whereas ^[^0-9] means don't match a number at the start of a line, and [^0-9] means don't match a number, wherever [^0-9] appears in your expression).

In your expression ^.\{42\} means match 42 of any character starting at the beginning of the line, as DrSammy described.

Last edited by Scott; 04-28-2010 at 07:50 PM.. Reason: typo
 
Login or Register to Ask a Question

Previous Thread | Next Thread

8 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Deciphering AWK code

Dear experts, I am a relative novice in the Unix and came across a very useful code that I regularly use for my research blindly. I am wondering if any of the professional members could kindly briefly explain to me what the code actually does? Many thanks in advance The script is awk... (4 Replies)
Discussion started by: arsalane
4 Replies

2. Programming

Deciphering a tag character string

I have a string, eg 7f30.3 and I want to store things in the following way npos = 7 decform = true width = 30 ndp = 3 I need to read each character one by one. I am coding in fortran but I can try to code it should answer be given in C in the above way. (2 Replies)
Discussion started by: kristinu
2 Replies

3. Shell Programming and Scripting

need help deciphering this if statement

I'm going through my bash book and came across this if statment. if *$)" ]; then the book says that the grep expression means "an initial dash followed by a digit" (which I understand) "optionally followed by one or more digits" That's the part I can't figure out -- I know the * is a... (8 Replies)
Discussion started by: Straitsfan
8 Replies

4. Programming

Some help with Perl please (deciphering)

I am trying to simplify the coding in a script I was given, but it was written 7-10 years ago and is pretty complicated. below is a tidbit, if someone can break it down for me I would appreciate it. sub ParseText { my ($line, $key, $value, $sub, $script); foreach $line (@_)... (0 Replies)
Discussion started by: callyvan
0 Replies

5. Shell Programming and Scripting

Deciphering strings or variable values

Hi, I have a script at the moment of which reads in simply what the latest version is within a folder i.e. v001, v002, v003 etc and then stores this latest version in a variable i.e. $LATEST would echo v003. I have then cut this string so that I only consider the 003 part. I would then like to... (3 Replies)
Discussion started by: cyberfrog
3 Replies

6. UNIX for Dummies Questions & Answers

Deciphering the Code

Hi people I am trying to learn this code and see how it relates to the old DOS days. I have a line of code that I am not sure what the first part does. Any help will be greatly appreciated. It is from a Save command that is used to backup files to a directory. It goes like this if ;then... (10 Replies)
Discussion started by: coyote1967
10 Replies

7. Shell Programming and Scripting

Help deciphering FTP get perl script

I found this very useful perl script that will check a remote ftp server, search for files of a specific time and get them. When I run the script it works, but it gave me the following error: Couldn't get filename_12-13-07.txt Bad file number What in this script would cause this? I know... (2 Replies)
Discussion started by: bbbngowc
2 Replies

8. Shell Programming and Scripting

Help deciphering script

There are files on a remote server with the file name ending in "mm-dd-yy.txt". The script I am running is: mls "Daily_Service_Text_File_*" /my/local/dir/Filelisting.txt nawk -F_ -f file.awk /my/local/dir/Filelisting.txt | sort -k1n | cut -f2- | tail -1 It worked up too "12-31-07.txt" but... (3 Replies)
Discussion started by: bbbngowc
3 Replies
Login or Register to Ask a Question