Searching text files with GNU Grep utility

I enjoy sharing tips of something I’ve picked up with the hope it helps others.  GREP is a common utility in the Unix world (thatis what I hear anyway), it’s something I’ve never really dug into.  The day came I found a tip to pass along.  I needed to search non-structured text files looking for specific text. I couldn’t find a clean way using Log Parser or Findstr utilities, these are two common tools I use.  Updated – Here is the link I used to install on Windows http://gnuwin32.sourceforge.net/packages/grep.htm


What impressed me I could search for a set of text that contains commas, slashes and other normal separators as one string of text.   Here is an example of what I was looking for.  I tried the Windows Services for Unix utilities, but GNU Grep seemed more straight forward.


grep -i ‘example.com,max value, (Megabits/s)’ menu.h main.c


Usage: grep [OPTION]… PATTERN [FILE] …
Search for PATTERN in each FILE or standard input.
Example: grep -i ‘hello world’ menu.h main.c


Regexp selection and interpretation:
  -E, –extended-regexp     PATTERN is an extended regular expression
  -F, –fixed-strings       PATTERN is a set of newline-separated strings
  -G, –basic-regexp        PATTERN is a basic regular expression
  -P, –perl-regexp         PATTERN is a Perl regular expression
  -e, –regexp=PATTERN      use PATTERN as a regular expression
  -f, –file=FILE           obtain PATTERN from FILE
  -i, –ignore-case         ignore case distinctions
  -w, –word-regexp         force PATTERN to match only whole words
  -x, –line-regexp         force PATTERN to match only whole lines
  -z, –null-data           a data line ends in 0 byte, not newline


Miscellaneous:
  -s, –no-messages         suppress error messages
  -v, –invert-match        select non-matching lines
  -V, –version             print version information and exit
      –help                display this help and exit
      –mmap                use memory-mapped input if possible


Output control:
  -m, –max-count=NUM       stop after NUM matches
  -b, –byte-offset         print the byte offset with output lines
  -n, –line-number         print line number with output lines
      –line-buffered       flush output on every line
  -H, –with-filename       print the filename for each match
  -h, –no-filename         suppress the prefixing filename on output
      –label=LABEL         print LABEL as filename for standard input
  -o, –only-matching       show only the part of a line matching PATTERN
  -q, –quiet, –silent     suppress all normal output
      –binary-files=TYPE   assume that binary files are TYPE
                            TYPE is ‘binary’, ‘text’, or ‘without-match’
  -a, –text                equivalent to –binary-files=text
  -I                        equivalent to –binary-files=without-match
  -d, –directories=ACTION  how to handle directories
                            ACTION is ‘read’, ‘recurse’, or ‘skip’
  -D, –devices=ACTION      how to handle devices, FIFOs and sockets
                            ACTION is ‘read’ or ‘skip’
  -R, -r, –recursive       equivalent to –directories=recurse
      –include=PATTERN     files that match PATTERN will be examined
      –exclude=PATTERN     files that match PATTERN will be skipped.
      –exclude-from=FILE   files that match PATTERN in FILE will be skipped.
  -L, –files-without-match only print FILE names containing no match
  -l, –files-with-matches  only print FILE names containing matches
  -c, –count               only print a count of matching lines per FILE
  -Z, –null                print 0 byte after FILE name


Context control:
  -B, –before-context=NUM  print NUM lines of leading context
  -A, –after-context=NUM   print NUM lines of trailing context
  -C, –context=NUM         print NUM lines of output context
  -NUM                      same as –context=NUM
      –color[=WHEN],
      –colour[=WHEN]       use markers to distinguish the matching string
                            WHEN may be `always’, `never’ or `auto’.
  -U, –binary              do not strip CR characters at EOL (MSDOS)
  -u, –unix-byte-offsets   report offsets as if CRs were not there (MSDOS)


`egrep’ means `grep -E’.  `fgrep’ means `grep -F’.
With no FILE, or when FILE is -, read standard input.  If less than
two FILEs given, assume -h.  Exit status is 0 if match, 1 if no match,
and 2 if trouble.

MSDeploy.exe tool for content replication, sync IIS settings and more!

I’m not one for just cross linking to any article.  This article is one of those cases!  For those who are responsible for maintaining IIS servers.  Probably one of the most needed tools is keeping settings, content and configuration in sync across multiple machines, web-farms included.  MS has released a tool for this very option.  Read more…


http://blogs.iis.net/msdeploy/archive/2008/01/22/welcome-to-the-web-deployment-team-blog.aspx


Thanks ScottGu, Faith and others I know on the IIS team working on this MUCH needed tool!

Log Parser – Select IIS log entries between timeframes.

I recently needed to select all IIS log entries between a specific timeframe.  Log parser to the rescue!  Here are a couple of examples I used. 


‘Change the location of files right after the timeframe.’Change the location of files right after the timeframe.  Displays in the command window
logparser “select date,time,cs-uri-stem,cs-uri-query,sc-status,time-taken from c:\iislogs\w3svc1\ex080109.log where to_time(time) between timestamp(’01/01 16:35:00′, ‘MM/dd hh:mm:ss’) and timestamp(’01/01 16:40:00′, ‘MM/dd hh:mm:ss’)” -rtp:-1


‘Change the location of files right after the timeframe with a particular status code of 500 and pipe to an external file
logparser “select date,time,cs-uri-stem,cs-uri-query,sc-status,time-taken from c:\iislogs\w3svc1\ex080109.log where to_time(time) between timestamp(’01/01 16:35:00′, ‘MM/dd hh:mm:ss’) and timestamp(’01/01 16:40:00′, ‘MM/dd hh:mm:ss’) and sc-status = 500” -rtp:-1 > filename.txt

Hope this is as useful to you as it was to me!


Cheers,


Steve

Send email with Powershell script, schedule script with Windows Task Scheduler

Here is a set of samples I used to do a common task in my scripting life.  This go around I wanted to use Powershell. 


 

A) Create a script to send emails in powershell
—————————————————-
1) Open Powershell type set-executionpolicy Unrestricted 
‘This allows scripts to be run’
‘You’ll want to also look at using RemoteSigned
Type

2) Type Notepad myscript.ps1


3) Paste sample code and save in myscript.ps1


$SmtpClient = new-object system.net.mail.smtpClient
$SmtpServer = “localhost”
$SmtpClient.host =
$SmtpServer
 

$From = “Friendly Reminder <User@example.com>”
$To = User2@example.com
$Title = “Subject Matter”
$Body = “Body Text” 
$SmtpClient.Send($from,$to,$title,$Body)  

B) Testing Script
—————————————————-
1) Type ./myscript.ps1
‘Verify you receive the email.  

C) How to schedule a powershell script in Windows Task Scheduler
—————————————————-
1) Create a new scheduled task.

‘The syntax is to execute the script is:
powershell -command “& ‘SomeDir\myScript.ps1′” 


2) Set the script to run as your normal task scheduler accounts.


 


3) Execute task, verify you receive the email


Hope this helps,


Steve

IIS webcasts

Even though a lot of my blog postings are related to IIS 7.0, there is a LOT of existing information worth watching to strengthen your IIS 6.0 skills.  There is between 70 and 80 webcasts on a wide variety of topics.  Thanks to my Zune, I’m slowly going to work my way through many of them. 


‘IIS Webcast Series
http://www.iis.net/default.aspx?tabid=2&subtabid=24


‘Internet Information Services Webcasts
http://www.microsoft.com/windowsserver2003/iis/support/webcasts.mspx


 

IIS7 – post #61 – Additional steps in building an IIS 7.0 server

One of the strengths of IIS 7.0 is the module architecture.   Along with this feature, provides the MS team the ability to release additional components “out of band” that aren’t necessarily part of the core install.  This blog post is dedicated to some additional things I do when loading an IIS 7.0 server.  As time goes on, this list probably will grow.  If you have something special you do, please pass it along.


Here are a few things to do after you install IIS 7.0


IIS7 – post #60 – Migrate SimpleCMS to IIS 7.0, using Integrated Pipeline

I was looking for a simple CMS (content management system) for some personal sites.  I ran across SimpleCMS by Steve Smith (President of http://www.aspalliance.com).  I wanted to get SimpleCMS working on IIS 7.0.  I also wanted to run the Application Pool in Integrated Mode.  Here are the steps I followed.   No code changes were required.   Thanks Steve for making a straight forward and simple CMS system.


1) Download SimpleCMS
http://www.codeplex.com/SimpleCMS


2) Create sample site in IIS 7.0
c:\windows\System32\inetsrv\appcmd add site /name:”Example.com” /bindings:http/*:80: /physicalPath:c:\inetpub\example.com


‘Here are the results
SITE object “Example.com” added
APP object “Example.com/” added
VDIR object “Example.com/” added


3) Extract SimpleCMS zip files to C:\inetpub\example.com


4) Create a bin folder in the example.com root folder
Move the AjaxControlToolkit.dll, AJAXExtensionsToolbox.dll, AspAlliance.SimpleCms.dll, Freetextbox.dll to the bin folder.


5) Run the migrate command using Appcmd
c:\windows\system32\inetsrv\appcmd migrate config “Example.com”


This will add the appropriate “IIS 7.0” related settings to web.config.  It’ll also add the appropriate ‘Modules’ and ‘Handler’ mappings in the site.


Notice in simplecms1.jpg, ScriptModule setting that is highlighted.



Notice in simplecms2.jpg, the 4 entries at the top, 3 with mappings to AspAlliance.SimpleCMS and one to FreeTextBox



6) Install SQL Express locally or create a database on an existing server.  Update the connection string in web.config.


7) Run http://example.com/admin.cmsx, Click “Setup Database” button


8) You should be presented with the Admin interface.


If you don’t get the Admin interface, there might be a couple of errors I didn’t mention.


Download ASP.NET AJAX 1.0 (this needs to be installed or the System.Web.Extensions error will appear)
http://www.microsoft.com/downloads/details.aspx?FamilyID=ca9d90fa-e8c9-42e3-aa19-08e2c027f5d6&displaylang=en


Also, comment or remove line 59.  I guess you could install Visual J++ too.
Line 59:     <add assembly=”vjslib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A” />

Hope this helps.


Steve Schofield
Microsoft MVP – IIS

Zune 80 GB toy!

Every geek should treat themselves to one gift for Christmas.  I’ve been living in the dark ages, no IPOD, no MP3 player (PS: My wife and kids have them).  My son got an Zune 8 GB for Christmas, I downloaded some songs and videos and was hooked.  For $50 dollars more, I got my own 80 GB.  http://www.zune.net/en-US/products/zune80gb/default.htm 


There is SO much information available I’ve wanted to watch.  God willing, my goal is to get my MSCE this year.  I plan on using to download webcasts, podcasts to help study.  You can take this thing to workout, in the car, or that favorite “in-laws” house. 🙂  I read some reviews, I’m not sure why people have had an issue, using a Zune is straight forward.  The Zune app isn’t as intuitive as ITUNES, but it’s good enough.  My biggest challenge is organzing all the cool stuff to watch or listen!


WebCasts and podcasts
http://edge.technet.com/Feeds/RSS/Zune/
http://www.microsoft.com/seminar/en/BMO-PODCAST/TechNet_Longhorn_wma.xml
http://www.microsoft.com/events/podcasts/default.mspx


Addtional podcasts
http://www.microsoft.com/seminar/en/BMO-PODCAST/TechNet_Management_WMA.xml
http://www.microsoft.com/seminar/en/BMO-PODCAST/TechNet_Active_Directory_WMA.xml
http://www.microsoft.com/seminar/en/BMO-PODCAST/TechNet_Exchange_Server_WMA.xml
http://www.microsoft.com/seminar/en/BMO-PODCAST/TechNet_SQL_Server_WMA.xml


I’m still a newb, but my new favorite site besides www.IIS.net is http://edge.technet.com.   If you are an IT Pro, this site is worth bookmarking.  If you have a story, pass it along.


Cheers and Happy New Year!


Steve