Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UNIX';通信';实用程序允许BSD中的大小写不敏感,但不允许Linux(通过-i标志)。如何在Linux中获得它?_Unix_Command Line_Case Insensitive_Bsd - Fatal编程技术网

UNIX';通信';实用程序允许BSD中的大小写不敏感,但不允许Linux(通过-i标志)。如何在Linux中获得它?

UNIX';通信';实用程序允许BSD中的大小写不敏感,但不允许Linux(通过-i标志)。如何在Linux中获得它?,unix,command-line,case-insensitive,bsd,Unix,Command Line,Case Insensitive,Bsd,我在BSD平台(OSX)上开发的应用程序中使用了出色的UNIX“comm”命令行实用程序。当我部署到我的Linux生产服务器时,我发现不幸的是,Ubuntu Linux的“comm”实用程序没有使用-I标志来表示这些行应该不区分大小写。显然,POSIX标准不需要-i选项 所以。。。我左右为难。我真的需要在BSD上运行良好的-I选项。到目前为止,我一直在尝试在Linux box上编译BSD comm.c源代码,但我得到了: 对于如何在Linux上获得支持“comm-i”的comm版本,有人有什么

我在BSD平台(OSX)上开发的应用程序中使用了出色的UNIX“comm”命令行实用程序。当我部署到我的Linux生产服务器时,我发现不幸的是,Ubuntu Linux的“comm”实用程序没有使用-I标志来表示这些行应该不区分大小写。显然,POSIX标准不需要-i选项

所以。。。我左右为难。我真的需要在BSD上运行良好的-I选项。到目前为止,我一直在尝试在Linux box上编译BSD comm.c源代码,但我得到了:

对于如何在Linux上获得支持“comm-i”的comm版本,有人有什么建议吗


谢谢

您可以在
comm.c
中添加以下内容:

void *reallocf(void *ptr, size_t size)
{
    void *ret = realloc(ptr, size);
    if (ret == NULL) {
        free(ptr);
    }
    return ret;
}
你应该可以编译它了。确保
comm.c
中有
#包含
(它可能已经这样做了)

编译失败的原因是BSD
comm.c
使用了
reallocf()
,这不是标准的c函数。但是写起来很容易

对于如何在Linux上获得支持“comm-i”的comm版本,有人有什么建议吗


不完全是这样;但是您是否检查了
join
实用程序是否可以满足您的需求?这一个在Linux上确实有
-i
选项…

@OP,没有必要到这样的长度来编译您自己的src代码。这里有另一个建议。由于您希望不区分大小写,因此在将文件传递给comm之前,您可以使用另一个工具(如
tr
)将两个文件中的大小写转换为小写(或大写)

tr '[A-Z]' '[a-z]' <file1 > temp1
tr '[A-Z]' '[a-z]' <file2 > temp2
comm temp1 temp2
tr'[A-Z]'[A-Z]'temp1
tr'[A-Z]'[A-Z]'temp2
通信临时1临时2

您可以尝试对这两个文件进行cat,并通过管道将它们传输到uniq-c-i。它将显示两个文件中的所有行,在第一列中显示外观数。只要原始文件没有重复的行,第一列>1的所有行都是两个文件共有的行


希望有帮助

是的,我考虑过这一点,但我实际上需要在比较过程中折叠大小写,然后保留结果中字符的原始大小写。谢谢你的建议!有趣的实用程序,但我需要通信。谢谢!不幸的是,虽然utf-8编码的文件可以正常工作,但它不能处理拉丁文1编码的文件。有没有办法处理这个问题?comm:/path/to/file:无效或不完整的多字节或宽character@Sam:您的环境变量是什么<代码>echo$LANG
。你应该好好利用它:将它设置为
C
,或
en_US.UTF-8
,等等。有一个
--忽略大小写
选项,但它从未实现过。
tr '[A-Z]' '[a-z]' <file1 > temp1
tr '[A-Z]' '[a-z]' <file2 > temp2
comm temp1 temp2