我正在尝试更好地学习命令行,并想知道这两个命令之间有什么区别。
grep -c ^b example
和
grep ^b example| cat –n
答案1
嗯,根据到手册, grep
:
搜索图案每一个文件。默认情况下,
grep
打印匹配的行。
并带有-c
标志:
-c, --count
抑制正常输出;相反,打印每个输入文件的匹配行数。
因此,grep -c ^b example
打印数字(计数)与模式匹配的行,同时grep ^b example
打印行本身。
至于cat
,它被描述为
连接文件并在标准输出上打印
该-n
标志的作用是:
-n, --number
对所有输出行进行编号
给定管道且没有文件名,cat
从管道读取,因此输出是 的输出grep
,并添加了行号。因此grep ^b example| cat –n
打印所有匹配的行,并编号。
这与 不同grep -n ^b example
,其中grep
添加了匹配的行号。grep
知道原始文件的行号,而cat
只能看到输出grep
并相应地对行进行编号。
所以,给定输入文件
$ cat example
bar
foo
basf
我们有:
$ grep -c ^b example
2
$ grep ^b example |cat -n
1 bar
2 basf
$ grep -n ^b example
1:bar
3:basf
答案2
好的命令:
grep -c ^b example
:输出以 letter 开头的行的匹配行数b
,以及grep ^b example | cat -n
:将grep命令的结果传递给cat命令并列出它们的行号。-n
将cat
它们与行号一起列出的力量。
例子:
example.txt 内容:
media sound3
media sound1
media sound2
find sound -type f -name sound[0-9] -printf 'media %f\n' > file.txt
find sound -type f -name sound[0-9] -exec bash -c 'echo media bash >> file.txt' {} \;
find sound -type f -name sound[0-9] -exec bash -c "f='{}'; echo media $( basename ${f}) >> file.txt" \;
(1) 的结果:
3
(2) 的结果:
1 media sound3
2 media sound1
3 media sound2