LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2216|回复: 25

模拟cat

[复制链接]
发表于 2005-12-30 13:53:20 | 显示全部楼层 |阅读模式
有多少中方法可以把文件打印到stdout,模拟cat。只考虑文本文件。

sed ""
sed h
sed -n p
awk '{print}'
awk /^/
awk /$/
grep '^'
grep '$'
perl -ne print
perl -pe ""
cut -c1-
pr -t
tail +0
comm file /dev/null
cp file /dev/stdout
cp file `tty`
ul #这个是不是要取决于终端类型?
strings

用到重定向:
paste - <file
tee <file
tr a a <file  #a a可以是任意相同字符

用到管道(没什么意思,聊备一格)
gzip -c file | zcat
bzip2 -c file | bzcat
diff file /dev/null | sed -e 1d -e 's/^< //'

...

请补充。
发表于 2005-12-30 19:32:56 | 显示全部楼层
说实话,cat用着不是挺好的吗?
如果不嫌麻烦,这个也行:
sed "" foo.txt | sed h | sed -n p | awk '{print}' | awk /^/ | awk /$/ | grep '^' | grep '$' | perl -ne print | perl -pe "" | cut -c1- | pr -t | tail +0 | cp /dev/stdin /dev/stdout
或者再加上:
| comm /dev/null -
只是会在文件前面输出一些空白。
如果组合起来,可以得到更多的方式,数都数不清呢!呵呵!:p
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-30 19:39:31 | 显示全部楼层
娱乐,聊作脑筋急转弯,所以我说管道就没意义了。;)
回复 支持 反对

使用道具 举报

发表于 2005-12-30 20:13:37 | 显示全部楼层

  1. while read line;do echo $line;done<filename
复制代码

  1. echo "$(<filename)"
复制代码

  1. exec 3<>filename;while read line <&3;do echo $line;done;exec 3>&-
复制代码

  1. ifs=$IFS
  2. IFS=
  3. set -- $(<filename)
  4. echo $@
  5. IFS=$ifs
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-30 20:34:53 | 显示全部楼层
请教烈火

  1. while read line;do echo $line;done<filename
复制代码


行首的空格或tab怎么办,应该有办法,记不得了。
回复 支持 反对

使用道具 举报

发表于 2005-12-31 01:15:11 | 显示全部楼层
Post by troll
请教烈火

  1. while read line;do echo $line;done<filename
复制代码


行首的空格或tab怎么办,应该有办法,记不得了。

ifs=$IFS
IFS=
...
IFS=$ifs
回复 支持 反对

使用道具 举报

发表于 2005-12-31 08:42:51 | 显示全部楼层
wall <filename
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-31 10:40:31 | 显示全部楼层
谢谢烈火。

wall不对。
回复 支持 反对

使用道具 举报

发表于 2005-12-31 11:47:01 | 显示全部楼层
main(){int c;while((c = getchar()) != EOF) putchar(c);}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-31 12:08:22 | 显示全部楼层
晕, c都出来了,不算
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表