cat | wc -c为什么不能输入一行,然后就显示出wc的统计结果?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
jiandan23
帖子: 94
注册时间: 2010-12-17 22:31
系统: Mint 19.2

cat | wc -c为什么不能输入一行,然后就显示出wc的统计结果?

#1

帖子 jiandan23 » 2015-03-06 11:27

RT,研究很久了,都没找到原因
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: cat | wc -c为什么不能输入一行,然后就显示出wc的统计结果?

#2

帖子 rosynirvana » 2015-03-06 11:51

可以的
cat | wc -c
12345^D^D
第一个^D刷新缓存把数据送进去,第二个^D表示cat的输入结束

但是结果会在同一行,看上去就是123455
头像
jiandan23
帖子: 94
注册时间: 2010-12-17 22:31
系统: Mint 19.2

Re: cat | wc -c为什么不能输入一行,然后就显示出wc的统计结果?

#3

帖子 jiandan23 » 2015-03-06 14:47

那为什么执行cat > a.txt的时候,每输入一行,按下回车之后,该行就会被立刻写入a.txt?
rosynirvana 写了:可以的
cat | wc -c
12345^D^D
第一个^D刷新缓存把数据送进去,第二个^D表示cat的输入结束

但是结果会在同一行,看上去就是123455
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: cat | wc -c为什么不能输入一行,然后就显示出wc的统计结果?

#4

帖子 rosynirvana » 2015-03-06 15:05

jiandan23 写了:那为什么执行cat > a.txt的时候,每输入一行,按下回车之后,该行就会被立刻写入a.txt?
rosynirvana 写了:可以的
cat | wc -c
12345^D^D
第一个^D刷新缓存把数据送进去,第二个^D表示cat的输入结束

但是结果会在同一行,看上去就是123455
行缓冲,用^D刷新缓冲区也是一个效果
limkokhole
帖子: 1
注册时间: 2015-03-25 21:54
系统: fedora

Re: cat | wc -c为什么不能输入一行,然后就显示出wc的统计结果?

#5

帖子 limkokhole » 2015-03-25 22:53

$ cat | while read -r line; do echo -n "$line"| wc -c; done
apple is a
10
hello world
11
$

我能想到的是用 while read, 不是很熟悉 pipeline, 尝试用 xargs -n1, stdbuf -o 0 都失败在 wc -l 把 input 当成文件名来读取。 不知谁能分享其它更好的方法 ? :oops:
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: cat | wc -c为什么不能输入一行,然后就显示出wc的统计结果?

#6

帖子 zhw2101024 » 2015-03-26 11:59

看这里

代码: 全选

wc -l <(ls)
<()这个语法相当于把命令的输出重定向到

代码: 全选

/dev/fd/63
这个文件描述符,然后把文件1描述符路径作为一个参数传给前边的wc -l。
回复