Visual studio 为什么可以';是否在该文件中一次匹配多个字符?

Visual studio 为什么可以';是否在该文件中一次匹配多个字符?,visual-studio,sed,cygwin,Visual Studio,Sed,Cygwin,我想使用sed处理visualstudio生成的一组文件。似乎存在问题的文件有一些神奇之处,导致sed的行为不同,即使给定相同的字符串: 生成相同字符串的两种方案: $ echo "#endif // not APSTUDIO_INVOKED" #endif // not APSTUDIO_INVOKED $ cat Version.rc.in | tail -n 3 | head -n 1 #endif // not APSTUDIO_INVOKED 在任何一种情况下,我

我想使用sed处理visualstudio生成的一组文件。似乎存在问题的文件有一些神奇之处,导致sed的行为不同,即使给定相同的字符串:

生成相同字符串的两种方案:

$ echo "#endif    // not APSTUDIO_INVOKED"
#endif    // not APSTUDIO_INVOKED

$ cat Version.rc.in | tail -n 3 | head -n 1
#endif    // not APSTUDIO_INVOKED
在任何一种情况下,我都可以一次替换一个字符:

$ echo "#endif    // not APSTUDIO_INVOKED" | sed 's/A/B/'
#endif    // not BPSTUDIO_INVOKED

$ cat Version.rc.in | tail -n 3 | head -n 1 | sed 's/A/B/'
#endif    // not BPSTUDIO_INVOKED
但是当我尝试替换多个字符时,文件输出失败,而echo输出成功

$ echo "#endif    // not APSTUDIO_INVOKED" | sed 's/AP/B/'
#endif    // not BSTUDIO_INVOKED

$ cat Version.rc.in | tail -n 3 | head -n 1 | sed 's/AP/B/'
#endif    // not APSTUDIO_INVOKED
进一步的修补使我确信,限制与sed匹配长度超过一个字符的字符串的能力有关。例如,
's/A/XXX/'
起作用,但
's/AP/BB/'
不起作用

为什么?

我正在Windows Server 2012上使用Cygwin

$ uname -a
CYGWIN_NT-6.3 MattsWinBox 2.3.1(0.291/5/3) 2015-11-14 12:44 x86_64 Cygwin

猜测一下:来自VisualStudio的文件可能使用UTF-16编码,每个字符需要两个字节,sed可能不知道。您可以尝试使用以下命令签出:

echo "#endif    // not APSTUDIO_INVOKED" | od -c
cat Version.rc.in | tail -n 3 | head -n 1 | od -c
od-c
将本地代码用于不可打印字符,逐字符转储输入数据

对于第一个命令,我在linux上获得以下输出:

0000000   #   e   n   d   i   f                   /   /       n   o   t
0000020       A   P   S   T   U   D   I   O   _   I   N   V   O   K   E
0000040   D  \n
0000042

就这样。输出:
0000000\0\0e\0n\0d\0i\0f\0\0
<代码>\0 D\0\r\0\n非常感谢。在调用sed之前,通过iconv-f utf16-t ascii管道传输文件内容解决了此问题。