Sed query

 
Thread Tools Search this Thread
Operating Systems OS X (Apple) Sed query
# 1  
Old 02-11-2010
Sed query

Hello Im fairly familiar with using the sed command for substitution, however I have been passed a script which checks the logged on username and directory type with a sed section which I cant figure out. The sed function has me baffled and I cant find out from the man page what its trying to do with the output.

directoryType=`dscacheutil -cachedump -entries user | sed -n "/$username/{g;1!p;};h" | awk '{print $9}'`

Any pointers gratefully recieved.
# 2  
Old 02-21-2010
Hi.

It tries to match a username:
Code:
/$username/

If it matches, swaps the pattern space with the contents of the hold buffer, and prints it (if it's not the first line of the file, in which case the hold buffer would be empty):
Code:
{g;1!p;}

It then puts the current line (the pattern space) into the hold space:
Code:
/$username/{g;1!p;};h

Basically, it remembers the previous line, and prints that when username matches.

This is a bit long-winded, but you work through what the sed is doing:

Code:
$ dscacheutil -cachedump -entries user

1 Cache entries (ordered as stored in the cache):
2
3       Category         Best Before         Last Access      Hits    Refs       TTL    Neg  DS Node
4     ----------  ------------------  ------------------  --------  ------  --------  -----  ---------
5           User   02/21/10 20:45:00   02/21/10 19:56:00        96       1      3600         /Local/Default
6                      Key: pw_name:nobody
7
8           User   02/21/10 20:45:00   02/21/10 19:56:00        35       1      3600         /Local/Default
9                      Key: pw_name:scott
10
11          User   02/21/10 20:43:52   02/21/10 19:56:20        32       1      3600         /Local/Default
12                     Key: pw_uid:501
13
14          User   02/21/10 20:45:00   02/21/10 19:56:00       145       1      3600         /Local/Default

$ username=scott
$ dscacheutil -cachedump -entries user | sed -n "/$username/{g;1!p;};h" | awk '{print $9}'

Sed on Line:   1
Pattern space: Cache entries (ordered as stored in the cache):
Hold space:    <empty> (can't be any previous line in the hold buffer)

Sed on Line:   2
Pattern space: <empty> (line 2 is blank)
Hold space:    Cache entries (ordered as stored in the cache): (previous line)

Sed on Line:   3
Pattern space: Category         Best Before         Last Access      Hits    Refs       TTL    Neg  DS Node
Hold space:    <empty>

Sed on Line:   4
Pattern space: ----------  ------------------  ------------------  --------  ------  --------  -----  ---------
Hold space:    Category         Best Before         Last Access      Hits    Refs       TTL    Neg  DS Node

Sed on Line:   5
Pattern space: User   02/21/10 20:45:00   02/21/10 19:56:00        96       1      3600         /Local/Default
Hold space:    ----------  ------------------  ------------------  --------  ------  --------  -----  ---------

Sed on Line:   6
Pattern space: Key: pw_name:nobody
Hold space:    User   02/21/10 20:45:00   02/21/10 19:56:00        96       1      3600         /Local/Default

Sed on Line:   7
Pattern space: <blank>
Hold space:    Key: pw_name:nobody

Sed on Line:   8
Pattern space: User   02/21/10 20:45:00   02/21/10 19:56:00        35       1      3600         /Local/Default
Hold space:    <blank>

Sed on Line:   9 <<--- Match found, print hold space, to awk, print $9 - /Local/Default
Pattern space: Key: pw_name:scott
Hold space:    User   02/21/10 20:45:00   02/21/10 19:56:00        35       1      3600         /Local/Default

(the hold space for each line is the pattern space of the previous line)

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed for query

Hi all, I am trying to remove quite a lot of numbers for a file I have which looks something along the lines of; 1,2,3,4,5,6 etc I have a list of numbers I want removing looking like; 10000 10987 16572 etc etc and have been trying to run; for id in `cat list` ; do sed -i -e... (8 Replies)
Discussion started by: JayC89
8 Replies

2. Shell Programming and Scripting

SED Query

Hi all, I am trying to use SED to input lines to a file in a specific place. So far I have; sed '/#NewEntry/ i\Insert this line' myfile.txt The output is printing to screen correctly but what is the best way to write it back to the file without overwriting everything? I tried adding >... (6 Replies)
Discussion started by: JayC89
6 Replies

3. Shell Programming and Scripting

sed query

I have a sed query. There is a line which has tilde and I want to separate this line using sed. The line is: ABP_ETC_ROOT=~xdmadm The query to get this line is: sed -n '/\(.*\)~\(.*\)/p' infile I want to get xdmadm from this line and I am using this sed command: sed -n... (5 Replies)
Discussion started by: som.nitk
5 Replies

4. Shell Programming and Scripting

sed query

hi i had posted this earlier.. got no reply !! how to change assigned value in a file using sed suppose the file contains age = 30; how to change it to age =50; i tried sed 's/^age*./age =50;' filename but i am getting the o/p as age =50; 30; plz hlp!! (4 Replies)
Discussion started by: gopsman
4 Replies

5. Shell Programming and Scripting

query on sed

I have done a script using sed which replaces a string in file. I face 2 problems, while using sed command. 1)last line of the file is missing. 2)if i am are using wild card character in the command, Its not taking the next matching pattern ie if I am giving the pattern abc*def to be replaced... (2 Replies)
Discussion started by: iceiceice
2 Replies

6. UNIX for Dummies Questions & Answers

Reg: Query in sed

Hi Penchal, I would appreciate if you can provide me a brief explanation on what you are trying to do in the commnad below. echo "6-9-2008" | sed 's/\(.\)-\(.\)-\(.*\)/\3-0\2-0\1/g' Thanks Amit (1 Reply)
Discussion started by: patelamit009
1 Replies

7. Shell Programming and Scripting

sed related query

Hi I have a file which looks like this //string = "abcd"; //info //string = "*pqrs"; //add string = "#123"; //sub //string = "#1234567890" data = check(string) //string = "#1234567890" I want to modify this as string = "#987"; //mult data = check(string) How do i do that? (1 Reply)
Discussion started by: gopsman
1 Replies

8. Shell Programming and Scripting

SED query

I'm writing a script which word counts the number of lines in two files. If one file is bigger than the other I'd like to edit one of the files to delete some lines to make both the same. It does not matter where in the file the lines are deleted from. It's expected that this will be ran from... (3 Replies)
Discussion started by: chog1010
3 Replies

9. Shell Programming and Scripting

sed query

I have a series of folders /temp/a /temp/b /temp/c In folders a, b, and c, I have files a1.txt..........a20.txt b1.txt..........b40.txt & c1.txt..........c60.txt Each file has the same data format :- Line 1 AAAAA aaaa Line 2 BBB bbbbbb Line 3 CCCC cccccc Etc etc I need to write a... (13 Replies)
Discussion started by: grinder182533
13 Replies

10. Shell Programming and Scripting

sed query..

hi, I have an xml file and I need to replace the tags with different names all at a time here is what I have <cevalue> <cevalue1> <cevalue2> <cevalue3> <cevalue4> <cevalue5> and I need these like these... <cevalue> <cevalue> <cevalue> <cevalue> <cevalue> <cevalue> I tried a few but... (2 Replies)
Discussion started by: mgirinath
2 Replies
Login or Register to Ask a Question