Linux文本处理工具练习

近期的一些Linux文本工具练习题

自上次学了之后就一直没学了,主要是工作太忙,这次决定静下心来好好学,工作已辞。

简单工具练习

1、找出ifconfig “网卡名”命令结果中本机的IPv4地址

[root@centos81 ~]#ifconfig ens160 | head -n2 | tail -n1 | tr -s " " | cut -d " " -f3
10.0.0.205

2、查出分区空间使用率的最大百分比值

[root@centos81 ~]#df -h | grep "/dev/nv*" | tr -s " " | cut -d" " -f5 | sort -nr | head -n1
15%

3、查出用户UID最大值的用户名、UID及shell类型

[root@centos81 ~]#cat /etc/passwd | cut -d: -f1,3,7 | sort -nr | head -n1
wang:1101:/bin/bash

4、查出/tmp的权限,以数字方式显示

[root@centos81 ~]#stat /tmp | head -n4 | tail -n1 | cut -d" " -f2 | tr -d "(" | cut -d"/" -f1
1777

5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

[root@centos81 ~]#netstat -nt | tail -n+3 | tr -s " " | cut -d" " -f4 | sort -nr | uniq -c      
2 10.0.0.205:22
grep练习

1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)

[root@centos81 ~]#grep -i  ^s /proc/meminfo
[root@centos81 ~]#grep   ^[sS] /proc/meminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行

[root@centos81 ~]#grep -v ".*/bin/bash$" /etc/passwd

3、显示用户rpc默认的shell程序

[root@centos81 ~]#grep ^rpc.* /etc/passwd | cut -d: -f7

[root@centos81 ~]#grep ^rpc.* /etc/passwd | grep -o "/[a-z]\+/[a-z]\+$"

4、找出/etc/passwd中的两位或三位数

[root@centos81 ~]#grep -o "\b[0-9]\{2,3\}\b" /etc/passwd

5、显示CentOS8的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行

[root@centos81 etc]#grep -E "^ {1,}[^ ]{1,}" /etc/grub2.cfg

6、找出"netstat -tan"命令结果中以LISTEN后跟任意多个空白字符结尾的行

[root@centos81 ~]#netstat -tan | grep ".*LISTEN \+$"

7、显示CentOS8上所有UID小于1000以内的用户名和UID

[root@centos81 ~]#cat /etc/passwd | cut -d: -f1,3 | grep ".*\:[0-9]\{,3\}$"

8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行

[root@localhost ~]# echo bash testbash basher sh nologin | xargs -n1 useradd
[root@localhost ~]# usermod -s /sbin/nologin nologin
[root@localhost ~]# grep "^sh:" /etc/passwd

9、利用df和grep,取出磁盘各分区利用率,并从大到小排序

[root@centos81 ~]#df -h | grep "/dev/nv*" | tr -s " " | cut -d" " -f5 | sort -nr
egrep练习

1、显示三个用户root、mage、wang的UID和默认shell

[root@centos81 ~]#grep -E "^(root|mage|wang).*" /etc/passwd | cut -d: -f1,3,7

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

[root@centos81 ~]#grep -E "^[[:alnum:]]*\(\).*"  /etc/rc.d/init.d/functions

3、使用egrep取出/etc/rc.d/init.d/functions中其基名

[root@centos81 ~]#echo /etc/rc.d/init.d/functions | egrep -o "[a-z]*$"

4、使用egrep取出上面路径的目录名

[root@centos81 ~]#echo /etc/rc.d/init.d/functions | egrep -o "^/.*/"

5、统计last命令中以root登录的每个主机IP地址登录次数

[root@centos81 ~]#last | egrep "^root" | egrep -o "([0-9]+\.){3}[0-9]+" | uniq -c

6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255

[root@centos81 data]#cat file1
0
9
10
99
100
199
200
249
250
255
[root@centos81 data]#egrep -o "^[0-9]$" file1

[root@centos81 data]#egrep -o "^[0-9]{2}$" file1

[root@centos81 data]#egrep -o "^[0-1][0-9]{2}$" file1

[root@centos81 data]#egrep -o "^2[0-4][0-9]$" file1

[root@centos81 data]#egrep -o "^25[0-5]$" file1

7、显示ifconfig命令结果中所有IPv4地址

[root@centos81 data]#ifconfig | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"

8、将此字符串: welcome to magedu linux中的每个字符去重并排序,重复次数多的排到前面

[root@centos81 data]#echo "welcome to magedu linux" | egrep -o "[[:alpha:]]" |  sort | uniq -c |sort -nr
sed练习:

1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符

[root@centos81 data]#sed -nr "s/^[[:space:]]+(.*)/\1/p" /data/grub2.txt

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

[root@centos81 data]#sed -nr 's/^#[[:space:]]+(.*)/\1/p' /data/fstab

3、在centos6系统/root/install.log每一行行首增加#号

[root@centos6 data]#sed -nr 's/(.*)/#\1/p' install.log

4、在/etc/fstab文件中不以#开头的行的行首增加#号

[root@centos81 data]#sed -nr 's/^[^#](.*)/#\1/p' fstab

5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

[root@centos81 data]#echo "/etc/fstab" | sed -nr 's/(^\/.*\/)*(.*)/\1/p'
/etc/
[root@centos81 data]#echo "/etc/fstab" | sed -nr 's/(^\/.*\/)*(.*)/\2/p'
fstab

6、利用sed取出ifconfig命令中本机的IPv4地址

[root@centos81 data]#ifconfig ens160 | sed -nr '/^[[:space:]]*inet\b/s@^[^0-9]*([0-9.]+).*@\1@p'
10.0.0.205

7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数

[root@centos81 data]#ls /mnt/Packages/ | sed -nr 's/.*\.(.*)\.rpm/\1/p'| sort | uniq -c

8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)
这道题感觉自己做的不对,因为文件里面的单词很多以下划线分开,众所周知下划线是无法分开单词的,所以用sed的话某些单词的出现次数会增多

[root@centos81 data]#egrep -ow "[[:alpha:]]+" /etc/init.d/functions | sort | uniq -c | sort -n
[root@centos81 data]#sed -r 's/[^[:alpha:]]+/\n/g' /etc/init.d/functions | sed -r '/^$/d' | sort | uniq -c | sort -n

9、将文本文件的n和n+1行合并为一行,n为奇数行

[root@centos81 data]#sed '1~2N;s/\n//p' a.txt
### 回答1: 下面是一个示例脚本,它使用 `ifconfig` 命令获取系统的 IP 地址: ```bash #!/bin/bash # Store the output of the ifconfig command in a variable ifconfig_output=$(ifconfig) # Extract the IP address using grep and cut ip_address=$(echo "$ifconfig_output" | grep 'inet' | cut -d ' ' -f 10) # Print the IP address echo "IP address: $ip_address" ``` 使用方法: 1. 将上述脚本复制并粘贴到文本编辑器,然后保存为 `get_ip.sh` 或其他任意文件名。 2. 使用 `chmod` 命令添加可执行权限:`chmod +x get_ip.sh` 3. 运行脚本:`./get_ip.sh` 这个脚本使用 `ifconfig` 命令获取网络接口的信息,然后使用 `grep` 命令提取带有 "inet" 的行,最后使用 `cut` 命令提取第 10 个字段,也就是 IP 地址。 注意:这个脚本仅适用于使用 `ifconfig` 命令Linux 系统,如果您使用的是其他命令,则需要更改脚本以使用相应的命令。例如,如果您使用的是 `ip` 命令,则可以使用如下脚本: ```bash #!/bin/bash # Store the output of the ip command in a variable ip_output=$(ip a) # Extract the IP address using grep and cut ip_address=$(echo "$ip_output" | grep 'inet' | grep -v 'inet6' | cut -d ' ' -f 6 | cut -d '/' -f 1) # Print the IP address echo "IP address: $ip_address" ``` 请注意,这个脚本使用 `ip a` 命令获取网络接口的信 ### 回答2: 编写一个简单的shell脚本可以使用ifconfig命令获取Linux系统的ip地址: ```shell #!/bin/bash # 调用ifconfig命令获取ip地址信息 ip_info=$(ifconfig) # 使用grep命令匹配inet地址行 ip_address=$(echo "$ip_info" | grep -i "inet ") # 使用awk分割字符串,提取ip地址 ip=$(echo "$ip_address" | awk '{print $2}') echo "当前系统的IP地址为:$ip" ``` 这个脚本首先调用`ifconfig`命令获取ip地址信息,然后使用`grep`命令匹配含有"inet "的行,并将结果存储在`ip_address`变量。接下来,使用`awk`命令分割字符串,提取其的ip地址并存储在`ip`变量。最后,使用`echo`命令打印出当前系统的ip地址。 注意:该脚本获取的是系统的第一个inet地址,如果系统有多个网卡或虚拟网络接口,可能需要对脚本进行适当修改。 ### 回答3: 要编写一个shell脚本来获取Linux系统的IP地址,可以使用ifconfig命令获取当前系统的网络接口信息,并从提取出IP地址。 以下是一个示例的shell脚本: ```shell #!/bin/bash # 使用ifconfig命令获取网络接口信息,并通过grep和awk命令提取出IP地址 ip_address=$(ifconfig | grep 'inet ' | awk '{print $2}' | awk -F ':' '{print $2}') # 输出IP地址 echo "当前系统的IP地址是: $ip_address" ``` 脚本的`ifconfig`命令用于获取网络接口的详细信息,`grep 'inet '`用于筛选出只包含IP地址的行,`awk '{print $2}'`用于提取出IP地址所在的列,最后的`awk -F ':' '{print $2}'`用于处理可能含有冒号的IP地址。最终的IP地址存储在变量`ip_address`,并通过`echo`命令输出。 保存脚本文件,比如命名为`get_ip.sh`,然后通过终端运行该脚本即可获取当前Linux系统的IP地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值