sed命令详细讲解:https://blog.csdn.net/2302_79294962/article/details/132489654

1. sed将文件test中第50行中的helloworld改为nihao

sed -i '50s/helloworld/nihao/' test

这条命令中,-i 参数表示直接对文件进行修改,'50s/helloworld/nihao/' 表示将第50行中的helloworld替换为nihao。

2. 打印/etc/passwd的奇数行

awk 'NR%2==1' /etc/passwd

这条命令中,awk命令通过 'NR%2==1' 来筛选出行号为奇数的行,并进行打印。

3. 在每一行后增加一空行

sed G filename

这条命令中,使用了 sed 命令,其中 G 表示在每一行后面添加一行空白行。filename 是需要处理的文件名。

4. 打印Linux系统的"IP地址,系统版本,CPU核心,内存大小"

ip addr show | awk '/inet / {print $2}' | sed 's/\/.*//'
lsb_release -a | grep Description | awk -F: '{print $2}'
cat /proc/cpuinfo | grep 'model name' | uniq | awk -F: '{print $2}'
  • ip addr show:显示网络接口信息,使用awk '/inet / {print $2}'提取包含"inet"关键字的行,并打印第二列(即IP地址),最后通过sed 's/\/.*//'去掉地址的子网掩码信息。s/ \/.* / /
    • 正则表达式/.*的意思如下:
      • /:表示匹配斜杠字符(/),由于斜杠在正则表达式中具有特殊含义,因此在其前面加上反斜杠\来转义,以表示其字面意义。
      • .*:表示匹配任意数量(包括零个)任意字符的序列。
    • 因此,正则表达式/.*的意思是匹配以斜杠字符(/)开头的任意字符序列,包括斜杠本身。
  • lsb_release -a:显示系统版本信息,使用grep Description提取包含"Description"关键字的行,并使用awk -F: '{print $2}'打印冒号后的描述信息。
  • cat /proc/cpuinfo:显示CPU信息,使用grep 'model name'筛选包含"model name"关键字的行(即CPU型号),使用uniq去重,再通过awk -F: '{print $2}'打印冒号后的型号信息。

5. 在文本的所有行前加序号

awk '{print NR ". " $0}' filename

这条命令中,awk命令通过 '{print NR ". " $0}' 将每一行前加上行号。其中 NR 表示当前行号,$0 表示整行内容。

6. 统计某个文件夹下的文件占用的字节数

find 文件夹 -type f -exec du -cb {} + | awk 'END{print $1}'
  • find /path/to/folder -type f -exec du -cb {} +:使用find命令找到指定路径的文件夹下的所有文件,并通过exec选项执行du命令以获取每个文件的字节数,并以累计方式显示总字节数。
  • awk 'END{print $1}':使用awk命令处理du命令输出的结果,在最后输出中只打印最后一个字段,即总字节数。

7. 从第4个字符开始,截取10个长度字符串

cut -c 4-13 filename

cut -c 4-13 表示从第4个字符开始截取到第13个字符的内容。

8. 打印乘法口诀表

seq 9 | awk '{for(i=1;i<=$1;i++)printf("%d*%d=%-2d ",i,$1,i*$1);print ""}'

这条命令中,seq 9 生成了序列 1-9,awk 用于处理输出。

9. 晚上11点到早上8点之间每两个小时输出一次系统日期与时间

#!/bin/bash
while true
do
  current_hour=$(date +%H)
  if [ $current_hour -ge 23 ] || [ $current_hour -lt 8 ]; then
    date
  fi
  sleep 7200 # 等待两个小时(7200秒)
done
  • 将上述脚本保存为一个.sh文件,然后在晚上11点(或之后)运行该脚本,它将每两个小时输出一次系统日期与时间。当时间不在指定范围内时,脚本会休眠直到符合条件再次输出时间。
  • 这个脚本中使用了date命令来获取当前系统时间,并通过判断当前小时数来决定是否输出时间。sleep 7200命令会让脚本进入休眠状态,直到满足条件再次输出时间。
  • 请注意,这个脚本需要在晚上11点(或之后)手动启动,而且会一直运行直到被手动中止。

10. 找出系统内大于50k,小于100k的文件,并复制到/tmp 目录下

#!/bin/bash
find / -type f -size +50k -size -100k -exec cp {} /tmp \;

11. 每隔2秒检查一下系统是否存在top进程,如果存在,就杀死

#!/bin/bash
while true
do
  if pgrep top > /dev/null
  then
    pkill top
  fi
  sleep 2
done
  • 将上述脚本保存为一个.sh文件,然后在命令行运行该脚本,它将每隔2秒检查一次系统是否有top进程存在,如果存在就会杀死该进程。
  • 在上述脚本中,pgrep top命令用于检查是否有top进程存在,如果存在则会返回进程ID,然后使用pkill top命令来杀死该进程。
  • 请谨慎使用这个脚本,因为它可能会导致正在运行的top进程被强制终止。

12. 测试192.168.1.0/24网段中主机存活情况(ping检查),把存活的主机写入host.txt

#!/bin/bash
for host in 192.168.1.{1..254}; do
  if ping -c 1 -W 1 "$host" >/dev/null 2>&1; then
    echo "$host" >> host.txt
  fi
done
  • 这条命令会遍历192.168.1.0/24网段下的所有IP地址(从1到254),对每个IP地址执行ping命令进行存活性检查。如果ping命令成功(返回状态码0),则表示主机存活,将该主机写入host.txt文件中。
  • 请注意,这个脚本需要在具有足够权限(例如root用户)的环境下运行,因为ping命令需要权限才能执行。另外,执行ping命令检查主机存活可能需要一些时间,具体时间取决于网络情况和主机的响应速度。
  • 2>&1 表示将标准错误(标准输出的另一个流)重定向到标准输出。这样将标准错误也丢弃到 /dev/null 设备中。
  • 运行完毕后,host.txt文件将包含存活的主机IP地址。