![]() |
how to use variable in sed command ?
I want to use variable in sed with the option p.
here is my code counter=1 while [ $counter -lt 4 ] do sed -n $counter p /tmp/file1 counter=$counter+1 done but this codeis not working. it is throwing the below error. sed: 1 is not a recognized function. please help me Thanks. |
Hi,
Have a look at this: Code:
counter=1Also fixed some other problems in the posted code snippet. Hope this helps. |
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++ )); do5) 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 |
You know, I just noticed...if all you want to do is print a range of lines from the file (or apply some expression to them), there's no need to run a loop. sed can be told to address a range of lines, as well as a single one.
Code:
cnt1=1Here are a few useful sed references. http://www.grymoire.com/Unix/Sed.html http://sed.sourceforge.net/grabbag/ http://sed.sourceforge.net/sedfaq.html http://sed.sourceforge.net/sed1line.txt |
| All times are GMT -5. The time now is 10:49 AM. |