以下是我遇到的问题,我只知道如何将ls
问题 1 的标准输出重定向到 foobar 文件:ls > foobar
编写一个命令行,将命令的 stdout 重定向
ls
到foobar
文件,并将 stdout 连接到命令的 stdinwc
。不要使用相应的文件描述符并按照给出的说明的顺序完成命令。编写命令行以在 shell 中仅显示重复的行。
任何帮助,将不胜感激!!
答案1
这看起来就像外壳底漆一样,所以你大概预计知道一些实用程序是常见的 shell 帮助程序(例如我看到引用的wc
实用程序)。
如果是这种情况,那么问题 #2 只是问您是否还记得 shell 实用程序的作用uniq
;因为答案是,“将输出通过管道传输到 uniq -d”。
$ echo -e "one\ntwo\ntwo\nthree" # Echo four lines, one is repeated
one
two
two
three
$ echo -e "one\ntwo\ntwo\nthree" | uniq -d # Filter the four
two
更新: 输出重复的行甚至出现故障,您只需对这些行进行排序,以便重复的行相邻并且可以被 识别uniq -d
。您可以在sort
之前使用uniq
:“... | sort | uniq -d”来执行此操作。
“将 A 的标准输出连接到 B 的标准输入”是通过管道字符完成的(类似于您已经知道的 > 字符):A | B
。这就是上面当标准输出echo
是时发生的情况管道式的到 的标准输入uniq -d
。
这一切都表明,你应该能够自己回答这些问题。事实上,你不是应该告诉你,你需要回去复习课程、笔记、教程或这些问题之前的任何内容;如果您错过了管道符号的使用,谁知道您还可能错过了什么?- 实际上,这就是这些愚蠢问题的目的:让你意识到何时需要加强你的基础。
答案2
2/ 一个小 shell 脚本,打印每一行与前一行相同:
( read a ; while read b ; do if [[ "$a" = "$b" ]] ; then echo "$a" ; fi ; a="$b";done ; )
您可以键入此行,然后键入< a_file
大多数(全部?)习语都来自 bash 手册 ( man bash
)。