Grep for string

 
Thread Tools Search this Thread
Homework and Emergencies Emergency UNIX and Linux Support Grep for string
# 1  
Old 01-24-2011
Grep for string

I can't come to think of any other way than just grep, but hopefully someone can give me a hint...

In a script I am working on, I need to get which scsi channel a disk is connected to.
I know it's devicename, which is sdc.

With this knowledge, I run hdparm -I /dev/sdc and grep for "Model number:",
through awk, I get it's model number, and run the command scsiadd -p and gep for the model number.

I get the line with the model number,
what I need though, it the line just right above.
I need to find out what scsi channel the disk is connected to so that I can runt scsiadd -r 3 0 0 0 (in this case)
Code:
Host: scsi3 Channel: 00 Id: 00 Lun: 00
Vendor: ATA      Model: ST3120026AS      Rev: 8.05
Type:   Direct-Access                    ANSI  SCSI revision: 05

Now is just the question, through the way I am grepping for model number, is there anyway I can get the line above?
The extraction of the numbers I'll do with more greps and awk's (unless someone has another idea).

I hope I am making myself understood enough.. I'm getting frustrated and are not entirely sure I describe my problem in a good enough way Smilie

Moderator's Comments:
Mod Comment You got 40 posts already, please use code tags in the future, thanks.

Last edited by zaxxon; 01-24-2011 at 12:37 PM.. Reason: code tags
# 2  
Old 01-24-2011
Code:
sed -n '/Model:/N; /Channel:/p'

# 3  
Old 01-24-2011
Just keep the previous line in awk:
Code:
awk '{ if($0 ~ /Model:/) { print ll; } ll=$0 }'

# 4  
Old 01-24-2011
As citaylor says - it could look like (if I got it right):
Code:
awk '/^Host:/ {sub(/scsi/,"",$2); a=$2; b=$4; c=$6; d=$8} /ST3120026AS/ {printf("scsiadd -r %i %i %i %i\n", a,b,c,d)}' infile
scsiadd -r 3 0 0 0

And maybe use system() to execute it or execute it with shell's $().
# 5  
Old 01-24-2011
Kudos to verdepollo for giving you what you asked for. Here's what I think you need:
Code:
MODEL=$(hdparm -I /dev/sdc | <some code here>$)
scsiadd -p |  
awk '/^Host: scsi/ { scsiid=substr($2,5,1) " " $4 " " $6 " " $8 }
       /Model: '"$MODEL"/' { print scsiid; found=1; exit(0); }
       END { exit(1-found); }'

---------- Post updated at 05:55 PM ---------- Previous update was at 05:52 PM ----------

Zaxxon and I posted about the same time. We take the same general approach but vary in our actual tactics. The exit() condition in mine allows you to test the return code of the command to see if it worked, ie, to put in a script, pipeline or if statement and fail appropriately.
# 6  
Old 01-24-2011
Sometimes a little truss/tusc/strace, strings on commands, or man page reading, can reveal where the information is stored in flat file land!
# 7  
Old 01-24-2011
Important: What Operating System and version are you running?
What hardware do you have?

Posting hardware enquiry comands out of context means nothing without knowledge of the command syntax and the hardware.

What is the output from:
Code:
ls -lad /dev/whatever_your_device_is_called

This should produce a unique identity mappable to the SCSI ID given your knowledge of your Operating System and hardware configuration.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Grep a sub-string from a string stored in a variable.

For example: I am grepping "Hello" from a file and there are 10 matches. So all ten lines with match will get stored into a variable($match). Now I want to ignore those lines which have "Hi" present in that. Currently I tried this: match = grep "Hello" file | grep -v "Hi" file But that's not... (2 Replies)
Discussion started by: pavan
2 Replies

2. Shell Programming and Scripting

Grep a string and count following lines starting with another string

I have a large dataset with following structure; C 0001 Carbon D SAR001 methane D SAR002 ethane D SAR003 propane D SAR004 butane D SAR005 pentane C 0002 Hydrogen C 0003 Nitrogen C 0004 Oxygen D SAR011 ozone D SAR012 super oxide C 0005 Sulphur D SAR013... (3 Replies)
Discussion started by: Syeda Sumayya
3 Replies

3. Shell Programming and Scripting

Grep exact string from main string

Hi , am getting output file, it sontains the below values. ./hawk_DOM1_FIRST_ENV ./hawk_DOM2_SECOND_ENV ./hawk_DOM3_THIRD_ENV Now I need to grep the word "DOM1_FIRST_ENV","DOM2_SECOND_ENV" like that. I tired with cut -d "_". Its not working with any deleimiter. Can you please help to... (3 Replies)
Discussion started by: ckchelladurai
3 Replies

4. Shell Programming and Scripting

Grep string in files and list file names that contain the string

Hi, I have a list of zipped files. I want to grep for a string in all files and get a list of file names that contain the string. But without unzipping them before that, more like using something like gzcat. My OS is: SunOS test 5.10 Generic_142900-13 sun4u sparc SUNW,SPARC-Enterprise (8 Replies)
Discussion started by: apenkov
8 Replies

5. Shell Programming and Scripting

grep exact string from files and write to filename when string present in file

I am attempting to grep an exact string from a series of files within a directory and append that output to the filename when it is present in the file. I've been after this all day with no luck. Thanks for your help in advance :wall:. (4 Replies)
Discussion started by: JC_1
4 Replies

6. Shell Programming and Scripting

Grep a string from input file and delete next three lines including the line contains string in xml

Hi, 1_strings file contains $ cat 1_strings /home/$USER/Src /home/Valid /home/Review$ cat myxml <projected value="some string" path="/home/$USER/Src"> <input 1/> <estimate value/> <somestring/> </projected> <few more lines > <projected value="some string" path="/home/$USER/check">... (4 Replies)
Discussion started by: greet_sed
4 Replies

7. Shell Programming and Scripting

Grep a string and write a value to next line of found string

Hi, I have two variables x and y. i need to find a particular string in a file, a workflow name and then insert the values of x and y into the next lines of the workflow name. basically it is like as below wf_xxxxxx $$a= $$b= $$c= figo $$d=bentley i need to grep the 'wf_xxxx' and then... (6 Replies)
Discussion started by: angel12345
6 Replies

8. Shell Programming and Scripting

grep on string and printing line after until another string has been found

Hello Everyone, I just started scripting this week. I have no background in programming or scripting. I'm working on a script to grep for a variable in a log file Heres what the log file looks like. The x's are all random clutter xxxxxxxxxxxxxxxxxxxxx START: xxxxxxxxxxxx... (7 Replies)
Discussion started by: rxc23816
7 Replies

9. Shell Programming and Scripting

Grep for a string and then grep using a string from that result

Hello, Thanks in advance for the query. There is a log file abcd.log which has multible line like this. "hello1" , "hello2", "hello3" , "hello4" , "hello5" I want to grep for the lines which has "hello4" & "hello5" and use "hello2" to grep the same log file again. All these should... (8 Replies)
Discussion started by: kzenthil
8 Replies

10. UNIX for Dummies Questions & Answers

| help | unix | grep - Can I use grep to return a string with exactly n matches?

Hello, I looking to use grep to return a string with exactly n matches. I'm building off this: ls -aLl /bin | grep '^.\{9\}x' | tr -s ' ' -rwxr-xr-x 1 root root 632816 Nov 25 2008 vi -rwxr-xr-x 1 root root 632816 Nov 25 2008 view -rwxr-xr-x 1 root root 16008 May 25 2008... (7 Replies)
Discussion started by: MykC
7 Replies
Login or Register to Ask a Question