1) Please use [code][/code]
tags around your code and data, to preserve formatting and to improve readability.
2) QUOTE ALL OF YOUR VARIABLE SUBSTITUTIONS
. You should never leave the quotes off a variable expansion unless you explicitly want the resulting string to be word-broken by the shell. This is a vitally important concept in scripting, so train yourself to do it correctly now. You can learn about the exceptions later.
As you can see, the solution to your sed
problem also comes from understanding proper quoting. (BTW, re druuna's post, the brackets aren't necessary if you separate the "p" from "counter", as sed ignores spaces between letter commands. You got the error you did because the entire expression needs to be passed to sed as a single unit.)
3) It's recommended to use ((..))
for numerical tests, and [[..]]
for string tests and other complex expressions. Don't use the old [..]
test unless you specifically need POSIX-style portability.
4) In this case, a c-style for
loop would be better than a while
loop. You can completely avoid the test and manually incrementing the variable.
for (( cnt=1 ; cnt < 4 ; cnt++ )); do
sed -n "$cnt p" /tmp/file1
5) When you get a chance, read through the whole BashGuide. It covers all the basic concepts in bash scripting, in an easy-to-read format.