#include <stdio.h> int main (int argc, char * argv[]) { printf("hello world.\n"); return 0; }输出为:
0001: #include <stdio.h>
0002:
0003: int main (int argc, char * argv[])
0004: {
0005: printf("hello world.\n");
0006: return 0;
0007: }
- BASH 的实现
$cat b.sh
IFS=$(echo -en '\n')
line=0
while read -r i ; do
line=$((line + 1))
printf "%04d: %s\n" "$line" "$i"
done
$cat cc.c | sh b.sh
0001: #include <stdio.h>
0002:
0003: int main (int argc, char * argv[])
0004: {
0005: printf("hello world.\n");
0006: return 0;
0007: }
注意问题: 1. read 函数是用 $IFS 来区分一个单词的,所以要读取一行,要设置 $IFS 变量。 1. read 函数的 -r 选项用来取消 escape 字符的功能。否则,斜杠字符会被特殊对待。
- perl 的实现
$perl -ane 'printf("%04d: %s", ++$i,$_)' cc.c
0001: #include <stdio.h>
0002:
0003: int main (int argc, char * argv[])
0004: {
0005: printf("hello world.\n");
0006: return 0;
0007: }
这只是 perl 的一种实现方法。还有很多种方法可以实现。
- AWK 的实现
$awk '{printf("%04d: %s\n",++i,$0)}' cc.c
0001: #include <stdio.h>
0002:
0003: int main (int argc, char * argv[])
0004: {
0005: printf("hello world.\n");
0006: return 0;
0007: }
- Python 的实现
$cat b.py
import sys;
i = 0;
for line in sys.stdin.readlines():
i=i+1
sys.stdout.write("%04d: %s"%(i,line))
$cat cc.c | python b.py
0001: #include <stdio.h>
0002:
0003: int main (int argc, char * argv[])
0004: {
0005: printf("hello world.\n");
0006: return 0;
0007: }