c - cat -b 和 cat -n 之间有什么区别以及 cat -s 如何工作

标签 c linux unix cat

我目前正在用 C 和 unix 开发一个 cat 命令。这次我的任务是设计 cat -b 和 cat -s 命令。但是我已经创建了其他命令,例如 -t、-v、-n、-e。我卡在了命令 -b 中,因为每当我触发命令时,它都会返回与 -n 返回的相同的输出。

例如

cat -n hello.c

1  #include<studio.h>
2    int main() {
3      printf("hello");
4      return 0;
5   }

cat -b hello.c

1  #include<studio.h>
2    int main() {
3      printf("hello");
4      return 0;
5   }

我的第二个问题是 cat -s 是如何工作的?当我再次触发命令时,但输出显示一个简单的 c 文件,没有任何更改。

例如

cat -s hello.c

 #include<studio.h>
   int main() {

    printf("hello");

     return 0;
 }

在此先感谢您的宝贵时间。

最佳答案

让我们从一个名为 qq.in 的简单六行文件开始,其中有两行非空行,两行空行和另外两行非空行:

a
b


c
d

cat -ncat -b 的区别在于前者会对所有行进行编号,而后者只会对非-空行:

$ cat -n qq.in       $ cat -b qq.in
     1  a                 1  a
     2  b                 2  b
     3                    
     4                    
     5  c                 3  c
     6  d                 4  d

另一方面,cat -s 会将连续的空行折叠成一个单个空行,如下所示(结合-n这样效果很明显):

$ cat -ns qq.in
     1  a
     2  b
     3
     4  c
     5  d

请注意,这些行必须真正为空,如果这些行包含空格或其他一些空白,这些标志将不会执行您期望的操作。如果你想将空白行视为空行,你可以先用类似的东西过滤它们:

sed -E 's/^\s+$//' qq.in | cat -b

关于c - cat -b 和 cat -n 之间有什么区别以及 cat -s 如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29069308/

相关文章:

c - strtok,使分隔符成为 ASCII 值的范围

将字符数组转换为C中的整数数组

linux - 如何使用 bash 获取处理器使用百分比?

python - Anaconda 安装后,conda 命令失败并显示 "ImportError: no module named conda.cli"

linux - 如何从 “permission denied” 中排除所有 “grep” 结果行?

regex - sed 替换部分字符串

c - 结合性如何影响操作数的评估顺序?

c++ - 使用 C/C++ 代码识别平台 linux 或 windows

r - 无法从 Linux 终端看到 R 帮助文件

unix - 停止Python3在系统目录中创建模块缓存