[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#35993: Windows port redirection bug
bug#35993: Windows port redirection bug
Sat, 1 Jun 2019 20:08:34 +0100
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0
I mentioned that escaping the quote wouldn't work either. Now I can't
test is, but I recall doing
SED 'S/\"//G' TESTE.TXT > OUT.TXT
and getting the same error result.
Monday I'll do some more tests and get back to you with my findings, if they're
relevant. I'm curious about the newer 4.7 version!
On 01/06/19 19:54, Assaf Gordon wrote:
tags 35993 notabug
On Wed, May 29, 2019 at 03:53:06PM +0100, address@hidden wrote:
The bug is reproducible with this command: SED 'S/"//G' TESTE.TXT > OUT.TXT
It should remove double quotes and save the result in the out.txt file. With
a Bash shell it works as expected, but under Windows 10's command line it
prints the resulting output and issues this error:
SED: CAN'T READ >: NO SUCH FILE OR DIRECTORY
SED: CAN'T READ OUT.TXT: NO SUCH FILE OR DIRECTORY
Escaping the double quote doesn't change the result, but if I use another
character instead, like SED 'S/X//G' TESTE.TXT > OUT.TXT it works.
This is not a bug in sed - just incorrect usage of quotes in the Windows
command prompt (CMD.EXE).
Before going into (long) details, here's the solution:
c:\Users\gordon\Desktop> type teste.txt
c:\Users\gordon\Desktop> sed-4.7-64bit.exe "s/\"/XXX/g" teste.txt
c:\Users\gordon\Desktop> sed-4.7-64bit.exe s/\"/XXX/g teste.txt
Now some details:
Single-quotes have special meaning AT ALL in cmd.exe.
There's no point using them. In fact, they will just cause more
problems, as they are passed as-is to the sed program, and sed will
complain that a single-quote is not a recognizable sed command:
c:\Users\gordon\Desktop> sed-4.7-64bit.exe '
sed-4.7-64bit.exe: -e expression #1, char 1: unknown command: `''
Double-quotes DO NOT behave like you expect if you are
familiar with unix-style shell quoting.
In unix-world, quotes (both single and double) act in pairs (opening
and closing), and we can speak about "text inside single/double quotes" and
"text outside quotes".
A side-effect of this approach is that strings with unbalanced quotes
result in parsing error. E.g. the following is not a complete/valid
command in unix:
In windows' CMD.EXE, double-quote character (ONE character) changes an
internal parsing state which controls whether special characters are
important or ignored (surprising/unintuitive if you're coming from unix
world). a SPACE character is the most common example of special
For example, in CMD.EXE the following is valid command:
echo foo > hello" world.txt
And it will create a file named HELLO<SPACE>WORLD<DOT>TXT .
The above string is parsed like so:
1. 'hello' - as is
2. double-quote - turns on "special character handling" state.
3. space character - kept (not ignored) because of the new state.
4. 'world.txt' - as is.
Another example, the following two commands are valid in CMD.EXE.
In the second command, once a double-quote character is encountered,
The PIPE character (loses its special meaning and is just consumed as
part of the string):
c:\Users\gordon\Desktop\a>echo "hello world" | more
c:\Users\gordon\Desktop\a>echo "hello | more
"hello | more
For more strange cases, try the following:
c:\Users\gordon\Desktop\c> echo foo > hello.txt
c:\Users\gordon\Desktop\c> echo foo > "hello world.txt"
c:\Users\gordon\Desktop\c> echo foo > hello" w o r l d.txt
c:\Users\gordon\Desktop\c> echo foo > hello" world.txt
c:\Users\gordon\Desktop\c> echo foo > 'hello world.txt'
Volume in drive C is OS
Volume Serial Number is 4CA3-CC48
Directory of c:\Users\gordon\Desktop\c
06/01/2019 12:50 PM <DIR> .
06/01/2019 12:50 PM <DIR> ..
06/01/2019 12:50 PM 17 'hello
06/01/2019 12:50 PM 6 hello world.txt
06/01/2019 12:50 PM 6 hello w o r l d.txt
06/01/2019 12:49 PM 6 hello world.txt
06/01/2019 12:49 PM 6 hello.txt
5 File(s) 41 bytes
2 Dir(s) 384,140,804,096 bytes free
To go even deeper into the nitty-gritty of CMD.EXE parsing and quoting,
see this interesting blog post:
As such, I'm closing this as "not a bug", but discussion can continue
by replying to this thread.
A newer version of SED (version 4.7) was released in December 2019,
and it contains few minor fixes/changes to behaviour on windows.
See here on how to build and/or download the binaries: