第5章 文本处理和字符串操作

来源:互联网 发布:ssh命令指定端口 编辑:程序博客网 时间:2024/06/03 20:39

1.     常用的文本操作

1.1.       取出最近访问的5个普通文件,并要求输出文件名和最后的访问时间

执行命令:

$ls –lut|grep “^-”|head -5|cut –c41-

 

解析:-t表示ls命令在输出时会按修改时间来排序;-u表示ls –l命令显示出文件的最后访问时间;”^-”是正则表达式,表示以横杆字符’-’起始的行;通过cut命令把无关信息删除,选项-c指定了cut命令会保留并输出那些字符。

 

选项-c有两种指定参数的方式:一种是通过横杆字符’-’指定一个范围;另一种是通过逗号连接多个范围。范围有如下一些指定的方式:

范围

描述

N

第N个字符

N-

从第N个字符一直到当前行结束

N-M

从第N个字符一直到第M个字符

-M

从第一个字符一直到第M个字符

 

1.2.       假如有两个文件name.txt和tel.txt,它们分别记录了员工的姓名和电话号码,如果希望把两个文件中的用户名和电话号码一一对应起来,该如何操作?

 

案例:

name.txt内容如下:

Matti
Aarnio
Dragos
Acostachioaie
Mark
Adler
Monalisa
Agrawal


tel.txt内容如下:

555-0542
555-1234
555-1256
555-2345
555-3456
555-4567
555-5678
555-6789 


命令执行:

 $paste –d’:’ name.txt tel.txt|cat -n

 

1.3.       检查当前系统中的各种Shell程序,统计出它们各被多少个用户使用,并把统计结果按照从多到少的顺序打印出来。

执行命令:

 $cat /etc/passwd | cut –d: -f7|sort|uniq –c|sort –nr

解析:选项-f7表示每行的第7个字段;uniq –c是合并统计;sort –nr 选项-n表示按照数字的大小排序,选项-r表示从大到小显示结果。

 

1.4.       统计文本文件中各个单词出现的个数

案例:

#!/bin/bash


#定义函数count,用来统计一个文件中的字数
count(){


    #函数需要一个参数才可以正确调用
if [$# !=1]
then 
   echo " Need one file parameter to work!"
exit 1;
fi

#删除标点符号和特殊字符
#构建一个很长的管道命令,每一段都单独写在一行中,增加可读性
tr '+-=*.;:{}!?<>"\n\t''' < $1 |\

#把所有大写字母转换为小写字母
tr 'A-Z' 'a-z'|\

#把连续重复的空格符替换为一个空格符
tr -s ''|\

#把空格符转换为换行符
tr '' '\n'|\

#把相同的单词放到一起
sort|\

#删除重复单词,并进行统计
uniq -c|\

#根据重复的次数进行排序
sort -rn


}


echo
echo "This script can count words of a specified file."


#使用空命令冒号构建循环
while :
do
    read -p "Enter the file path(or quit):"

case "$REPLY" in
   [Qq]|[Qq][Uu][Ii][Tt])
     echo " Bye."
 #在输入大、小写quit时,退出
 
 echo "$REPLY"
 
 exit 0
 ;;
*)
     #判断输入的是一个可读的普通文件,并且内容不为空
 if [ -f "$REPLY" ] && [ -r "$REPLY" ] && [ -s "$REPLY" ]
 then
                      #当用户输入一个合法文件时
                      #调用count函数统计文件的单词个数
                      count "$REPLY"  
 else
         #如果输入了非法文件,显示不能处理它
 echo "$REPLY can not be dealed with."
 fi 
 ;;
esac
done


exit 0

 

语法:

tr [option] .. SET1 [SET2]     --SET1会被SET2替换

1.5.       所有特殊字符替换

省略

 

1.6.       把TAB转换成空格符,且保证其他字符的位置不变

#cat命令的选项-T将把TAB字符显示为^I

$cat –T TABS.txt

#使用expand命令把TAB字符替换为空格

$expand TABS.txt | cat -T

 

 

2.     其他操作

1          

2          

2.1         windows系统的文件与Linux系统的文件之间进行转换

在Ubuntu Linux系统中,可以安装tofrodos包,使用其中的fromdos命令和todos命令来转换文本文件。

 

2.2         求一个字符串的长度

expr length STRING

 

 

2.3         把某些命令的输出格式化成一个表格

$(printf “PERMISSIONS LINKS OWNER GROUP SIZE DATE HH:MMFILE-NAME\n”;ls –l|sed 1d)|column –t

解析:命令ls –l|sed 1d输出当前目录下的文件列表,其中ls命令的输出经过管道传递给sed 1d命令进行处理,目的是删除目录列表中的第一行。


0 0