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.
http://mywiki.wooledge.org/Arguments
http://mywiki.wooledge.org/WordSplitting
http://mywiki.wooledge.org/Quotes
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.
http://mywiki.wooledge.org/BashFAQ/031
http://mywiki.wooledge.org/ArithmeticExpression
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.
Code:
for (( cnt=1 ; cnt < 4 ; cnt++ )); do
sed -n "$cnt p" /tmp/file1
done
http://wiki.bash-hackers.org/syntax/ccmd/c_for
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.
http://mywiki.wooledge.org/BashGuide