SHELLdorado Newsletter 1/2000 - February 13, 2000 ================================================================ The "SHELLdorado Newsletter" covers UNIX shell script related topics. To subscribe to this newsletter, leave your e-mail address at the SHELLdorado homepage: http://www.shelldorado.com/ "Heiner's SHELLdorado" is a place for UNIX shell script programmers providing Many shell script examples, shell scripting tips & tricks + more... ================================================================ Contents o What's new at the SHELLdorado? o Shell Tip: Useful print-text-and-read-line feature (ksh) o Shell Tip: Include current date in file name o Q&A: How to use "sed" to insert/replace strings ----------------------------------------------------------------- >> What's new at the SHELLdorado? ----------------------------------------------------------------- o The SHELLdorado web pages have been redesigned for - Simpler navigation - the SHELLdorado main sections are always just one mouse click away - More consistency - all pages now have the same "look and feel" - Greater accuracy - periodical link-checking, and automatic tagging of changes (i.e. new shell scripts) will result in more accurate and up-to-date information o New shell scripts were added to the "Scripts" section ----------------------------------------------------------------- >> Shell Tip: Useful print-text-and-read-line feature (ksh) ----------------------------------------------------------------- A common task in a shell script is "print text, read line", i.e. echo "Please enter your name: " read name The Korn shell (KSH) has a standard (but little used) feature to simplify this: read VAR?PROMPT i.e. read name?'Please enter your name: ' This KSH idiom has another advantage to "echo": The cursor is placed directly after the prompt string (not in the next line). ----------------------------------------------------------------- >> Shell Tip: Include current date in file name ----------------------------------------------------------------- Sometimes it's useful to include the current date in the file name, i.e. to keep different versions of daily changing files (log files, ...). In these cases the "date" command may be used to provide a date in a convenient format, i.e. $ date "+%Y-%m-%d" writes a day in ISO format year-month-day, i.e. "2000-02-13" (enter "man date" or "man 3 strftime" to get a list of all supported "%X" format specifiers). To rename the file "logins.log" to "logins.2000-02-13", (where "2000-02-13" will be the current date), we just have to write a script with the following content: mv logins.log logins.`date +%Y-%m-%d` ----------------------------------------------------------------- >> Shell Tip: News headlines from the web ----------------------------------------------------------------- Many sites provide up-to-date news headlilnes, some of them are updated many times a day. Wouldn't it be nice to just get the headlines, without starting up a browser? The following script does just this: it gets the current headlines from C|Net (news.cnet.com) directly via the Web, and prints them to the screen: wget -q -O - http://news.cnet.com | grep -i 'font.*size.*+1.*/news/.*html' | striphtml | grep -v '[ap]\.m\.' Example output: SEC chaiman urges investor caution U.S. investors, lulled into a false sense of security [...] Is Silicon Valley losing its appeal? For the first time in five years [...] HotBot's time warp For some, the dates appearing on Lycos site HotBot.com's [...] With the help of some programs (like "wget" and "striphtml") it's easy to get the most current information from the web. A larger example on how to get current news headlines is available at the "SHELLdorado": http://www.shelldorado.com/scripts/quickies/dailynews The programs "wget" and "striphtml" are available here: http://ftp.sunet.se/ftp/pub/www/utilities/wget/wget.tar.gz http://www.shelldorado.com/scripts/quickies/striphtml ----------------------------------------------------------------- >> Q&A: How to use "sed" to insert/replace strings ----------------------------------------------------------------- "Sed" ("stream editor") is a powerful tool to edit data non-interactively. The following examples show some common shell scripting problems, and their solutions using "sed". The first examples show, how to use "sed" to change text within a line using the "s" ("substitute") command of "sed: 1. Insert text at the start of a line: sed 's/^/NEW TEXT/' Example: prepend an "> " to each of the following lines (i.e. to "quote" an email): Hi, this is a test. The following command: sed 's/^/> /' produces this result: > Hi, > this is a test. 2. Append text at the end of a line: sed 's/$/NEW TEXT/' Example: append an exclamation mark ("!") at the end of the following lines: Hi this is a test The following command: sed 's/$/!/' produces the result: Hi! this is a test! 3. Change text somewhere in the line: sed 's/PATTERN/NEW TEXT/g' Example: in the following lines, replace each occurrence of the word "cool" with "extraordinary": SED is cool! The command sed 's/cool/extraordinary/g' gives the result: SED is extraordinary! 4. Insert/append text within a line To insert/append to an existing text (instead of changing it), the "&" character may be used to represent the matched string in the replacement text: Example: prepend the words "at least" to each single digit number (i.e. "1", "2", ...) in the following lines: this text contains 3 examples this line has 4 words The command sed 's/[0-9]/at least &/g' applied to the lines above results in: this text contains at least 3 examples this line has at least 4 words (The "&" within the replacement text will be substituted with the matched pattern) The examples above only change existing lines. If a complete new line should be added before/after a line matching a pattern, other "sed" commands can be used: 5. Insert a new line before a line matching "PATTERN": sed '/PATTERN/i\ PREPENDED LINE ' 6. Append a new line after a line matching "PATTERN": sed '/PATTERN/a\ APPENDED LINE ' ---------------------------------------------------------------- If you want to comment on the newsletter, or even want to submit an article of your own, send a mail to mailto:heiner.steven@shelldorado.com ================================================================ To unsubscribe send a mail with the body "unsubscribe" to newsletter@shelldorado.com ================================================================