前言:
现时咱们对“c语言统计一行文本的单词个数”可能比较关注,我们都需要剖析一些“c语言统计一行文本的单词个数”的相关知识。那么小编同时在网络上搜集了一些对于“c语言统计一行文本的单词个数””的相关资讯,希望兄弟们能喜欢,大家快快来了解一下吧!sed 对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容
语法 sed options scripts file
option -e 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用
-f 用指定的脚本文件来处理输入的文本文件-
-n、--quiet表示仅显示处理后的结果,禁止sed编辑器输出,但可以与p命令一起使用完成输出
-i 直接修改目标文本文件
-r 使用扩展正则表达式
常用命令
a:追加 向匹配行后面插入内容
c:更改 更改匹配行的内容
i:插入 向匹配行前插入内容
d:删除 删除匹配的内容
s:替换 替换掉匹配的内容
p:打印 打印出匹配的内容,通常与-n选项和用
=:用来打印被匹配的行的行号
n:读取下一行,遇到n时会自动跳入下一行
r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件
sed -e 4a\newLine testfile #testfile文件的第四行后添加一行,并将结果输出到标准输出
sed '2,5d' testfile #删除第 2~5 行
sed '3,$d' testfile #删除第 3 到最后一行
sed '2a drink tea' testfile #在第二行后(即加在第三行) 加上drink tea 字样:
sed '2i drink tea' testfile #第二行前加上drink tea
sed '2a Drink tea or \
drink beer ?' testfile #增加两行以上
sed '2,5c No 2-5 number' testfile #第 2-5 行的内容取代成为 No 2-5 number
sed -n '5,7p' testfile #仅列出 testfile 文件内的第 5-7 行
sed -n '/oo/p' testfile #搜索 testfile 有 oo 关键字的行
sed '/oo/d' testfile # 删除 testfile 所有包含 oo 的行,其他行输出
sed -n '/oo/{s/oo/kk/;p;q}' testfile # 搜索 testfile,找到 oo 对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把 oo 替换为 kk
sed -e 's/oo/kk/g' testfile #将 testfile 文件中每行第一次出现的 oo 用字符串 kk 替换,然后将该文件内容输出到标准输出:
sed -i 's/oo/kk/g' testfile #选项 i 使 sed 修改文件:
sed -i 's/oo/kk/g' ./test* #批量操作当前目录下以 test 开头的文件
sed -e '3,$d' -e 's/HELLO/RUNOOB/' testfile #删除 testfile 第三行到末尾的数据,并把 HELLO 替换为 RUNOOB
sed -i '$a # This is a test' regular_express.txt #在 regular_express.txt 最后一行加入 # This is a test:
awk 可编程的文件提取器和文件格式化工具, 处理或提取特定域(特定列)具有非常好的表现
语法 awk [options 可选参数] pattern(模式) {action(动作)} file(文件)
参数
-F 指定分割字段符
-V 定义或修改一个awk内部的变量
-f 从脚本文件中读取awk命令
内置变量
$n 指定分隔符后,当前记录的第n个字段(列)
$0 完整的输入记录
FS 输入字段分割符,默认是空格
OFS 输出字段分隔符,默认是空格
RS 输入记录分隔符(输入换行符),指定输入时的换行符
ORS 输出记录分隔符(输出换行符),输出时用指定符号代替换行符
NF(Number of fields:字段数) 分割后,当前行一共有多少个字段
NR(Number of records:记录数) 当前记录数,行数
FNR 各文件分别计数的行号
FILENAME 当前文件名
ARGC ARGC:命令行参数的个数
ARGV ARGV:数组,保存的命令行所给定的各参数
awk "NR==5" pwd.txt #显示文件第五行
awk "NR==2,NR==5" pwd.txt #显示文件2到5行
awk 'NR==3,NR==5{print NR,$0}' pwd.txt #显示3到5行并显示行号
awk -F ":" '{print NR,$1,$(NF-1),$NF}' pwd.txt # 显示第一行 倒数第二行最后一行
awk格式化输出
printf 和print的区别
format(格式)的使用
其与print的最大不同是,printf需要指定format
format用于指定后面的每个item(项目)的输出格式
printf语句不会自动打印换行符:\n
format格式的指示符都是以%开头,后跟一个字符如下
%c :显示字符的ASCII码
%d,%i :十进制整数
%e,%E :科学计数法显示数值
%f :显示浮点数
%g,%G :以科学计数法的格式或浮点数的格式显示数值
%s :显示字符串
%u :无符号整数
%% :显示自身
printf修饰符
-:左对齐,默认右对齐
+:显示数值符号
awk -F ":" 'BEGIN{printf "%-25s\t%-25s\t%-25s\t%-25s\t\n","用户名","用户ID","用户家目录","用户解释器"}{printf "%-25s\t%-25s\t%-25s\t%-25s\t\n",$1,$3,$6,$7}' pwd.txt
awk的模式
BEGIN 就是处理文本前,先执行BEGIN模式指定的动作
END 就是处理完所有文本之后,需要执行的动作
awk控制语句
if(判断条件){满足条件执行的语句} [else {不满足条件执行语句}
if(判断条件1){满足条件1执行语句}else if (判断条件2{满足条件2时执行语句}else{}
{while (判断条件){循环语句}},条件为真时,开始执行循环
do{循环语句}while(判断条件)
for(变量;判断;变量自增){循环语句}
break:直接跳出循环
continue:退出这次循环,进入下次循环
awk数组
awk中的数组只有关联数组
1.可以使用任意字符串,字符串要使用双引号括起来
2.如果某数组元素实现不存在,在引用时,awk会自动创建次元素,并将其值初始化为空字符串
awk内置函数
length():返回指定字符串的长度
rand():返回0和1之间的随机数,也就是小数在使用rand()函数时,在前面必须指定种子srand()
int()也是函数,它的作用是取整数,当前命令会随机取10以内的整数
sub(r,s,[t]):对t字符串进行搜索r表示模式匹配的内容,并将第一个匹配的内容替换为s
gsub(r,s,[t]):对匹配的字符全局替换
split(s,array,[r]):以r为分隔符,切割字符串s,并且将切割后的结果保存到array的数组中,第一个索引值为1
awk自定义函数,脚本调用
function name (虚变量1,虚变量2){
处理动作
处理动作
}
awk程序也可以写成脚本,然后当程序需要是,可以直接调用执行,awk脚本也是需要执行权限,所以在执行之前需要个执行权限
#!/bin/awk -f
function biji (x,y){
if(x>y){ max="x>y"}
else if (x==y){max="x=y"}
else{ max="x<y" }
return max
}
BEGIN{print biji(a,b)}
awk -v a=7 -v b=6 -f test.awk #x>y
wc 统计文件或I/O流中的"单词数量"
-w 统计单词数量
-l 统计行数量
-c 统计字节数量
-m 统计字符数量
-L 给出文件中最长行的长度
tr 字符转换过滤器
必须使用引用或中括号, 这样做才是合理的. 引用可以阻止shell重新解释出现在tr命令序列中的特殊字符
tr [- cdst ][-- help ][-- version ][Set1][Set2]
-c, --complement:反选设定字符。用于字符补集替换,用SET2替换SET1中不包含的字符
-d, --delete:删除指令字符,删除SET1指定的所有字符
-s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符,用SET1指定的字符来替换对应的重复字符
-t, --truncate-set1:将SET1中字符用SET2对应位置的字符进行替换,一般缺省为-t
字符集合的范围
\NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)
\ 反斜杠
\a Ctrl-G 铃声
\b Ctrl-H 退格符
\f Ctrl-L 走行换页
\n Ctrl-J 新行
\r Ctrl-M 回车
\t Ctrl-I tab键
\v Ctrl-X 水平制表符
CHAR1-CHAR2 :字符范围从 CHAR1 到 CHAR2 的指定,范围的指定以 ASCII 码的次序为基础,只能由小到大,不能由大到小。
[CHAR*] :这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止
[CHAR*REPEAT] :这也是 SET2专用的设定,功能是重复指定的字符到设定的 REPEAT 次数为止(REPEAT 的数字采 8 进位制计算,以 0 为开始)
[:alnum:] :所有字母字符与数字
[:alpha:] :所有字母字符
[:blank:] :所有水平空格
[:cntrl:] :所有控制字符
[:digit:] :所有数字
[:graph:] :所有可打印的字符(不包含空格符)
[:lower:] :所有小写字母
[:print:] :所有可打印的字符(包含空格符)
[:punct:] :所有标点字符
[:space:] :所有水平与垂直空格符
[:upper:] :所有大写字母
[:xdigit:] :所有 16 进位制的数字
[=CHAR=] :所有符合指定的字符(等号里的 CHAR,代表你可自订的字符)
-s 替换重复的字符
# 将连续重复的多个字符替换为单个字符,SET1指定了字符串要被操作的字符
echo "aaabbbaacccfddd" | tr -s [abcdf] // 输出 abacfd
# 删除空白行
tr -s ["\n"]
-d 删除字符
# 删除字符串中所有字母
echo "a12HJ13fdaADff" | tr -d "[a-z][A-Z]" //输出 1213
# 删除字符串中所有匹配SET1集合中的字符
echo "a1213fdasf" | tr -d [adfs] // 输出 1213
# 删除文件FileName中的数字、点、空格、横杠
cat FileName | tr -d "[0-9][.][\-][ ]"
-t 字符替换,一般缺省为-t,SET1和SET2中字符一一对应
# 将文件FileName中的小写字母全部转换成大写字母:
cat FileName |tr a-z A-Z
cat FileName |tr -t a-z A-Z
cat FileName |tr [:lower:] [:upper:]
# 将字符串中的SET1字符用SET2中字符替换
echo "a1213fdasf" | tr -t [afd] [AFO] // 输出 A1213FOAsF
-c 字符补集替换
# 文件FileName
Python 2015.9 - 2018.11
Linux 2016.4 - 2018.11
C 2013.9 - 2014.9
Golang 2018.11 -
# 删除文件FileName中的除字母以外的字符
cat FileName | tr -cs "[a-z][A-Z]" "\n"
cat FileName | tr -c "[a-z][A-Z]" "#" | tr -s "#" | tr -t "#" "\n"
// 输出
Python
Linux
C
Golang
标签: #c语言统计一行文本的单词个数