linux文本分析工具grep、sed和awk打印输出文本的单双奇偶行(grep也可以打印奇偶行)以及熟悉的ssh命令却有你不知道的一些用法

本文主要是介绍linux文本分析工具grep、sed和awk打印输出文本的单双奇偶行(grep也可以打印奇偶行)以及熟悉的ssh命令却有你不知道的一些用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、linux文本分析工具grep、sed和awk打印输出文本的单双奇偶行(grep也可以打印奇偶行)

    其实sed和awk要打印输出奇偶行是很容易的事情,不过只能使用grep来输出奇偶行的话怎么实现呢?今天我就想了一下,如果真的只能使用grep来输出奇偶行的话,能不能实现?怎么实现?当然这个只当玩玩了,毕竟有awk和sed,用grep来实现的必要性不大。

    如果你不看这篇文章,你可以先自己想想怎么实现?我刚才也开始想这事,开始我觉得好像没法实现,但是我又想只有想不到,没有做不到。于是我真花了几秒钟想了一下,确实可以实现,实现如下:做了一个测试文件testnum.txt共计12行文本,使用grep打印输出奇偶行如下:

[online@G18 ~]$ cat testnum.txt 35606 1discover31534 2index1119 3yestest2136 4someuser3211 T9330+21 RACCUA111 P11HD321 4Gkermit 007kermit 007.cn
007cn 007.cn
007cn www.007.cn
#grep直接打奇偶行好像行不能,因为选项属性里没有直接的奇偶判断逻辑,可以换一个想法:
[online@G18 ~]$ grep -n '' testnum.txt | grep  '[24680]:'
2:  31534 2index
4:   2136 4someuser
6:     21 RACCUA
8:    321 4G
10: kermit 007.cn
12:007cn www.007.cn
#这样便匹配出了偶数行
[online@G18 ~]$ grep -n '' testnum.txt | grep  '[24680]:' | grep -o -E '[^:]*$'31534 2index2136 4someuser21 RACCUA321 4Gkermit 007.cn
007cn www.007.cn
#这样便匹配出了奇数行
[online@G18 ~]$ grep -n '' testnum.txt | grep  '[13579]:' | grep -o -E '[^:]*$'     35606 1discover1119 3yestest3211 T9330+111 P11HDkermit 007
007cn 007.cn

        对于awk,sed来说,匹配出奇偶行那是awk,sed的长项了。比如使用awk可以有多种方法来匹配。比如使用行记录号NR来判断,也可以使用自增变量来判断。

#通过NR值对2求余判断取奇数行
[online@G18 ~]$ awk 'NR%2' testnum.txt  35606 1discover1119 3yestest3211 T9330+111 P11HDkermit 007
007cn 007.cn
#下面这条命令取反,即是取的偶数行
[online@G18 ~]$ awk '!(NR%2)' testnum.txt 
#使用自增计算来判断奇偶行,如下取偶数行:
[online@G18 ~]$ awk 'i++%2' testnum.txt 31534 2index2136 4someuser21 RACCUA321 4Gkermit 007.cn
007cn http://47.93.183.36
#如下则为取奇数行
[online@G18 ~]$ awk '!(i++%2)' testnum.txt
#换一个写法,使用++i来试一下,如下取的是奇数行
[online@G18 ~]$ awk '++i%2' testnum.txt       35606 1discover1119 3yestest3211 T9330+111 P11HDkermit 007
007cn 007.cn
#相反这取的就是偶数行
[online@G18 ~]$ awk '!(++i%2)' testnum.txt 
#上面所有的写法里都省略了{print $0}部分,因为这是默认的,实际和下面的命令意义一样。
[online@G18 ~]$ awk '!(++i%2) {print $0}' testnum.txt 

        对于sed命令,使用起来也是一样方便。sed命令中使用-n 1,2p(表示取第1到第2行)也可以使用1,+2p(从第一行和后面的2行)还有一种用法是1~2p(表示从第一行开始,每2行输出),即~表示步长的意义,后面的值即是步长的值。三者的示例如下:

[online@G18 ~]$ sed -n 1,2p testnum.txt 35606 1discover31534 2index
[online@G18 ~]$ sed -n 1,+2p testnum.txt 35606 1discover31534 2index1119 3yestest
[online@G18 ~]$ sed -n 1~2p testnum.txt   35606 1discover1119 3yestest3211 T9330+111 P11HDkermit 007
007cn 007.cn

二、熟悉的ssh命令却有你不知道的一些用法

    ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。一般系统都已装好,如果没有,使用以下安装(centos),如果ssh登录时出现问题在排除其它网络权限问题的情况下可以考虑重装ssh,相关命令如下:

#安装ssh
[root@kur15z ~]# yum install -y openssh-server openssh-clinets
#删除重装ssh
[root@kur15z ~]# yum remove openssh*;rm -rf /etc/ssh*;yum install -y openssh*;systemctl start sshd.service

ssh命令用法: ssh 选项 参数 , 其中可用选项如下:

-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。
#参数一般是远程主机以及执行指令

远程主机:指定要连接的远程ssh服务器;
指令:要在远程ssh服务器上执行的指令,但注意如果有指令,ssh不会跳至远程机器,执行完后会仍在本机。

#使用示例如下:
[root@kur15z ~]# ssh 114.215.80.214
Last login: Tue Sep 25 13:58:44 2018 from 124.212.96.19
Kermit: 114.215.80.214  快捷命令如下:
Welcome to server:80.214
[root@kur15z ~]#

    如果注意以上命令会发现,在使用ssh的时候,并没有提示输入密码,对,这就是已经实现了ssh免密跳转,和之前这篇文章里的实现是一样的:(可在本博客中通过搜索相关文章:rsync通过ssh的文件同步传输以及免密码传输的实现 ) 即是在本机执行ssh-keygen -t rsa 命令得到id_rsa.pub文件并将此文件放至目标机器/用户/.ssh/authorized_keys中即可(注意此文件权限)。这里可以使用ssh-copy-id命令,它可将本机的公钥直接复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的/home/username/.ssh和~/.ssh/authorized_keys的权利。
    在上面的ssh命令选项中,常用的选项也就是-l和-p了,分别用于指定ssh登录的用户和端口,如ssh -l hello -p 20001 114.215.80.214即表示使用用户hello登录服务器的20001端口,默认不写时用的就是root用户,另外也可以使用@写法。如下:

#使用用户hello登录服务器的20001端口
ssh -l hello -p 20001 114.215.80.214
ssh -p 20001 hello@ 114.215.80.214
#默认就是root用户和22端口,所以以下写法功能是一样的
[root@kur15z ~]#ssh 114.215.80.214
[root@kur15z ~]#ssh root@114.215.80.214
[root@kur15z ~]#ssh -p 22 root@114.215.80.214   
[root@kur15z ~]#ssh -l root -p 22 114.215.80.214
#下面这条命令有点不一样,后面加了一条命令ls -l,此命令是在目标机器上执行的,但是显示到本地,执行后仍在本机。
[root@kur15z ~]#ssh 114.215.80.214 ls -l
#ssh -copy-id使用示例
[root@kur15z ~]#ssh-copy-id user@ip 
[root@kur15z ~]#ssh-copy-id -i /root/.ssh/id_rsa.pub user@ip

    ssh的使用的时候是受目标服务器控制的,细心看一下,上面在使用ssh示例演示的时候,进入到新的服务器时会有Last login的时间提示以及其它提示信息,这里都是在目标服务器上的配置起的作用。ssh的配置文件/etc/ssh/sshd_config中有如下配置项:

PrintMotd yes
PrintLastLog yes
#几项常用的配置,是否允许root用户ssh登录
#PermitRootLogin yes
PermitRootLogin no
#默认的ssh端口
Port 22
#以下两项配置使用no可加快ssh登录
UseDNS no
GSSAPIAuthentication no
#sshd的重启
[root@kur15z ~]# service sshd status
openssh-daemon (pid  1381) is running...
[root@kur15z ~]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
[root@kur15z ~]# 

    PrintMotd即表示从远程登录此服务器时是否显示提示信息,打开此项后编辑文件:/etc/motd文件,此文件里即是提示的内容。PrintLastLog即表示自动显示上一次的最后登录时间,但是光打开这项不够,还需要在/var/log/文件夹里添加lastlog文件夹才能生效。在ssh的配置文件中还有几项常用:PermitRootLogin和Port端口设置、空闲超时时间等,修改sshd_config文件要生效是需要重启sshd的:service sshd restart

        有一篇文章总结的挺全的,记录一下:​https://www.cnblogs.com/kevingrace/p/6110842.html​

这篇关于linux文本分析工具grep、sed和awk打印输出文本的单双奇偶行(grep也可以打印奇偶行)以及熟悉的ssh命令却有你不知道的一些用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1090656

相关文章

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景