Re: Q: echo | sed ; can't replace range of lines
Re: Q: echo | sed ; can't replace range of lines
- Subject: Re: Q: echo | sed ; can't replace range of lines
- From: Graff <email@hidden>
- Date: Mon, 17 May 2004 23:22:13 -0400
The script I gave you works fine for me. I'm using Script Editor 2.0
(v43) with AppleScript 1.9.3.
The script that you have in your latest e-mail does not work, here's
what it looks like with the results of the "do shell script" commands:
----
set someLines to "1
2
3
4
5
6"
do shell script "echo " & someLines & " | tr -s '\\r' '\\n'" without
altering line endings
-->"1
-->"
do shell script "echo " & unixText & " | sed '/2/,/5/d'"
-->"sh: -c: line 2: syntax error near unexpected token `|'
-->sh: -c: line 2: ` | sed '/2/,/5/d''"
----
The line endings are still messing things up. You really need to use
the quoted form of a string when you pass it to a command like echo or
else the shell can misinterpret the string. That's why I added in the
"quoted form of" part to your script:
----
set someLines to "1
2
3
4
5
6"
set unixText to do shell script "echo " & quoted form of someLines & "
| tr -s '\\r' '\\n'" without altering line endings
unixText
-->"1
-->2
-->3
-->4
-->5
-->6
-->"
do shell script "echo " & quoted form of unixText & " | sed '/2/,/5/d'"
-->"1
-->6
-->"
----
As you can see adding "quoted form of" to convert the strings to quoted
strings allowed the script to work just fine.
- Ken
On May 17, 2004, at 10:00 PM, Gnarlodious wrote:
That doesn't do a thing for me, does it work for you?
[...]
This doesn't even work:
set unixText to do shell script "echo " & someLines & " | tr -s '\\r'
'\\n'
" without altering line endings
do shell script "echo " & unixText & " | sed '/2/,/5/d'"
Maybe this functionality is broken in Script debugger?
Entity Graff spoke thus:
You need to quote the string you are passing to the shell because of
the return characters. The return characters cause the command to be:
----
echo 1<return>
2<return>
3<return>
4<return>
5<return>
6 | sed 's/2/8/'
----
So the shell misinterprets your command. Here is a corrected version
of the script:
----
set someLines to quoted form of "1
2
3
4
5
6"
do shell script "echo " & someLines & " | sed 's/2/8/'"
-->"1
-->8
-->3
-->4
-->5
-->6"
do shell script "echo " & someLines & " | sed '/2/,/5/d'"
-->"1
-->6"
----
- Ken
On May 17, 2004, at 6:38 PM, Gnarlodious wrote:
Why does the first command work but the 2nd doesn't?
set someLines to "1
2
3
4
5
6"
set replaceLine to do shell script "echo " & someLines & " | sed
's/2/8/'"
set deleteRange to do shell script "echo " & someLines & " | sed
'/2/,/5/d'"
It operates on a text file just fine:
do shell script "sed -e '/2/,/5/d' testFile"
-- > 1
-- > 6
Am I doing something wrong?
_______________________________________________
applescript-users mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/applescript-users
Do not post admin requests to the list. They will be ignored.