Linux简单文本处理以及数据流重定向

来源:互联网 发布:淘宝钻石展位有效果吗 编辑:程序博客网 时间:2024/06/07 05:07
crontab 简介
crontab 命令常见于 Unix 和类 Unix 的操作系统之中(Linux 就属于类 Unix 操作系统),用于设置周期性被执行的指令。该命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。

通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合

sudo service rsyslog start:首先我们会启动 rsyslog,以便我们可以通过日志中的信息来了解我们的任务是否真正的被执行了

crontab -e添加一个计划任务,在文件最后一行添加*/1 * * * * touch /home/shiyanlou/$(date+\%Y\%m\%d\%H\%M\%S)

crontab -l可以查看我们添加哪些任务

sudo tail -f /var/log/syslog查看执行任务命令之后在日志中的信息反馈

crontab -r删除任务

sudo crontab -f &开启crontab

which cowsay>/dev/null && cowsay -f head-in ohch~

which cowsay>/dev/null && echo "exist" ||echo "nit exist"

&&就是用来实现选择性执行的,它表示如果前面的命令执行结果(不是表示终端输出的内容,而是表示命令执行状态的结果)返回0则执行后面的,否则不执行

管道:

管道是什么,管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
管道又分为匿名管道和具名管道(这里将不会讨论在源程序中使用系统调用创建并使用管道的情况,它与命令行的管道在内核中实际都是采用相同的机制)。我们在使用一些过滤程序时经常会用到的就是匿名管道,在命令行中由|分隔符表示,|在前面的内容中我们已经多次使用到了。具名管道简单的说就是有名字的管道,通常只会在源程序中用到具名管道。下面我们就将通过一些常用的可以使用管道的"过滤程序"来帮助你熟练管道的使用

ls -al /etc |less

cut打印出每一行的某一字段

cut /etc/passwd -d ':' -f 1,6

grep在文本中或stdin中查找匹配字符串,grep命令是很强大的,也是相当常用的一个命令,它结合正则表达式可以实现很复杂却很高效的匹配和查找

wc简单小巧的计数工具,wc/etc/passwd

wc -l /etc/passwd行数

wc -w /etc/passwd单词数

wc -c /etc/passwd字节数

wc -m /etc/passwd字符数

wc -L/etc/passwd最长行字节数

sort排序命令,cat /etc/passwd | sort

uniq去重命令

history | cut -c 8- | cut -d ' ' -f 1 |sort | uniq -dc输出重复过的行以及重复次数

history | cut -c 8- |cut -d ' ' -f 1 | sort | uniq -D输出所有重复的行

使用以前介绍过的方法,安装aview和imagemagick,然后用asciiview命令显示图片,使用方法可以用 man 命令查看。

tr -d删除和set1匹配的字符,注意不是全词匹配也不是按字符顺序匹配

tr -s去除set1指定的在输入文本中连续并重复的字符

echo 'hello shiyanlou' | tr -d 'olh'去除所有的olh

echo 'hello' |tr -s 'l'将ll去重为一个L

cat /etc/passwd | tr '[:lower:]' '[:upper:]'全部换位大写或小写输出

col -x将Tab转换为空格

col -h将空格转换为tab键

cat -A /etc/protocols

cat /etc/protocols|col -x | cat -A,其中col -x将tab转换为空格,然后在使用cat查看

join -t指定分隔符默认为空格

join -i忽略大小写的差异

join -1指明第一个文件要用那个字段来对比

echo '1 hello'>file1

echo '1 shiyanlou'>file2

join file1 file2

paste -d指定合并的分隔符默认为tab

paste -s不合并到一行,每个文件为一行

echo hello>file1

echo shiyanlou>file2

paste -d ':' file1 file2

paste -s file1 file2

来玩个小游戏吧

sudo apt-get install ninvaders

数据流重定向

当然前面没有用到的<和<<操作也是没有问题的,如你理解的一样,它们的区别在于重定向的方向不一致而已,>表示是从左到右,<右到左。

Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为stdin(标准输入,对应于你在终端的输入),stdout(标准输出,对应于终端的输出),stderr(标准错误输出,对应于终端的输出)

将cat的连续数次重定向到一个文件

mkdir Documents

cat >Documents/test.c<<EOF

#include<stdio.h>

int main(){

printf("hello world");

return 0;

}

EOF

cat Documents/test.c将一个文件作为命令的输入,标准输出作为命令的输出

echo 'hi'|cat将echo命令通过管道传过来的数据作为cat命令的输入,将标准输出作为命令的输出

echo 'hello shiyanlou'>redirect

cat redirect将echo命令的输出从默认的标准输出重定向到一个普通文件

cat Documents/test.c hello.c使用cat命令同时读取两个文件其中一个存在,另一个不存在,你可以看大除了正确输出前一个文件的内容,还在末尾出现了一条错误信息

cat Documents/test,c hello.c>somefile这里将看不到任何输出了

cat Documents/test,c hello.c>somefile 2&>1将标准错误重定向到标准输出再将标准输出重定向到文件注意要将重定向到文件

cat Documents/test.c hello.c&>somefilehell

echo 'hello shiyanlou' | tee hello

我们可以使用exec命令实现“永久”重定向。exec命令的作用是使用指定的命令替换当前的 Shell,及使用一个进程替换当前进程,或者指定新的重定向

zsh先开启一个子shell

exec 1>somefile使用exec替换当前进程的重定向将标准输出重定向到一个文件
后面你执行的命令的输出都将重定向到文件中直到你退出当前子shell

ls;exit; cat somefile

zsh

exec 3>somefile

先进入目录在查看否则你可能不能得到正确的结果然后再回到上一次的目录
cd /dev/fd/;ls -Al;cd -

echo "this is test">&3

cat somefile

exit

exec 3>&-

cd /dev/fd;ls -Al;cd-关闭

使用xargs分割参数列表

cut -d:fl</etc/passwd |sort |xargs echo 

sudo apt-get install caca-utils

cacaview <pic_file>

cacademo

cacafire你将看到一团火

挑战:

找出data1文件中出现频率次数前3的命令并保存在/home/shiyanlou/result

cut对文件中的行进行选取
cut -c 按字符选区8-从第8个字符开始直至末尾
cut -d " "自定义分割符为空格
cut -f选取区域
cut -c 8- data1选取data1文件中的所有行从第8个字符开始直到行尾
sort将文件中的行进行排序
sort -r逆序排序
sort -n以数字进行排序
sort -t" "自定义分隔符为空格
sort -k选取区域
uniq去除文件中连续的重复行
uniq -c在每行的前面显示当前在文件中连续出现的次数
uniq -d进显示重复行
uniq -u进显示不重复行
sed以行为单位对文件进行处理
sed -n安静模式
sed -i直接对目标文件进行修改cu
sed a在当前行的下一行新增
sed i在当前行的上一行新增
sed d删除
总的命令
cat data1|cut -c 8-|sort |uniq -dc|sort -nr|head -3>home/shiyanlou/result
cat result

将文件重定向到/home/shiyanlou/result
在查看结果就可以看到了













原创粉丝点击