当前位置: 首页 > Linux

计算机教育遗漏的一课-MIT-L4-数据管理

时间:2023-04-06 23:44:51 Linux

https://missing.csail.mit.edu/https://missing-semester-cn.g...https://www.bilibili。com/vide...noteREGEX入门交互式教程高级文本教程正则表达式调试器数据整理的味道sshmyserverjournalctl|grepsshd|grep“断开连接”|sed-E's/.*Disconnectedfrom(invalid|authenticating)?user(.*)[0-9.]+port[0-9]+([preauth])?$/2/'|排序|uniq-c|排序-nk1,1|尾-n10|awk'{print$2}'|paste-sd,sort-n将按数字对输入进行排序(默认情况下按字典顺序-k1,1表示“仅根据由空格分隔的第一列排序”。,n部分表示“仅排序至第n部分”,而默认是到行尾,这样的话整行排序是没有问题的,我们来这里主要是为了学习这个用法!如果我们想得到登录次数最少的用户,可以使用head而不是tail。或者用sort-r倒序排序。我们可以用paste命令来合并行(-s)和指定分隔符来分割(-d)。AWKawk其实是一种编程语言,只是恰好非常擅长处理文本。awk程序接受一个模式字符串(可选),以及一个指定模式匹配时应该做什么的代码块。默认是当模式字符串匹配所有行(如上面命令中使用的)).代码块中,$0代表整行的内容,$1到$n是一行中的n个区域。-F来修饰)。在这个例子中,我们的代码意味着:对于每一行文本,打印它的第二部分,即用户名。再比如,让我们统计所有以c开头以e结尾的名字,并且只尝试登录一次。|awk'$1==1&&$2~/^c[^]*e$/{print$2}'|wc-l其中wc-l计算输出结果中的行数。由于awk是一种编程语言,它可以像这样:BEGIN{rows=0}$1==1&&$2~/^c[^]*e$/{rows+=$1}END{printrows}BEGIN也是a匹配输入开头的模式(END匹配结尾)。然后,累加每一行的前半部分,最后输出结果。bcbc(BerkeleyCalculator)是一个命令行计算器。例如,您可以将每一行的数字相加:|粘贴-sd+|bc-l像这样更复杂的表达式也可以:echo"2*($(data|paste-sd+))"|bc-l在Shell命令中-虽然我们目前的讨论是基于文本数据,但它对二进制文件同样有用。例如,我们可以使用ffmpeg从相机中抓取一张图片,将其转换为灰度图像,然后将压缩后的文件通过SSH发送到远程服务器上,在远程服务器上进行解压、归档和显示。ffmpeg-loglevelpanic-i/dev/video0-frames1-fimage2-|转换--colorspace灰色-|压缩|sshmymachine'gzip-d|T恤副本.jpg|envDISPLAY=:0feh-'其中-frames1是第一帧,-fimage2将结果保存为图像而不是视频。命令中-表示标准输入输出流,比如convert--colorspacegray-表示将标准输入流的内容作为程序的输入,将灰度处理的结果放到标准输出流中.课后练习2words文件可以在这里下载:/usr/share/dict/words$grep-E"^.*[aA].*[aA].*[aA].*$"/usr/share/dict/字\|grep-vE"'s$"\|sed-E"s/^.*(\w{2})$/\1/"\|排序\|uniq-ic\|排序-r\|head-n3101an63ns51ia存在多少个两个字母的组合?显然$echo"26*26"|bc-l676我们把刚才的词尾保存下来,把所有的字母组合存为文件。$grep-E"^.*[aA].*[aA].*[aA].*$"/usr/share/dict/words\|grep-vE"'s$"\|sed-E"s/^.*(\w{2})$/\1/"\|排序\|uniq-i>words.txt2>words.txt$猫words.txt|head-n5aaacadaeag$回声{a..z}{a..z}|sed-E's//\n/g'>full_words.txt$catfull_words.txt|head-n5aaabacadae分别统计组合的个数:$wc-wfull_words.txt676full_words.txt$wc-wwords.txt110words.txt然后我们寻找之前没有出现过的组合。具体方法是将words.txt中的每一行作为搜索字符串,不匹配的行放在full_words.txt中。$grep-F-v-fwords.txtfull_words.txt|head-n5abafaiajao总共应该有676-110=566个结果,验证:$grep-F-v-fwords.txtfull_words.txt|wc-w566练习3.使用输出重定向进行就地替换只会产生一个空文件。在mansed中可以看到sed有-i选项,可以原地替换。-i[SUFFIX],--in-place[=SUFFIX]就地编辑文件(如果提供SUFFIX则进行备份)