linux的一些练习

1、 用 sed 修改 test.txt 的 23 行 test 为 tset。

sed -i '23s/test/tset/g' test.txt

-i表示修改原文件

g表示替换全部的test

2、 查看 web.log 第 25 行第三列的内容。

NO.1 sed -n '25p' web.log | awk -F ' ' '{print $3}'
NO.2 awk -F ' ' 'NR == 25{print$3}' web.log
NO.3 head -n 25 web.log | tail -n 1 | awk -F ' ' '{print $3}'

第一种写法里-n选项表示“静默模式”,也称为“安静模式”。当sed命令使用-n选项时,它将不会输出文本文件的内容,而只会在处理完指定的命令之后输出所需的内容。 

第二种写法NR == 25来匹配文件的第25行,然后使用print $3来打印该行的第3个字段。

第三种写法提取web.log文件的前25行,再使用tail命令提取最后一行中的第三列

3、 删除文件 tmp.txt 的前三行。

NO.1 sed -i '1,3d' tmp.txt
NO.2 tail -n +4 > tmp1.txt && rm tmp.txt && mv tmp1.txt tmp.txt
NO.3 awk 'NR>3{print}' > tmp1.txt && rm tmp.txt && mv tmp1.txt tmp.txt

第二种写法tail -n +4表示从文件的第4行开始输出,将结果重定向到一个临时文件tmp1.txt中,然后将tmp1.txt文件重命名为tmp.txt,以达到删除前三行的效果。

4、 写一个脚本,求 1000 内的质数。

脚本一:

#!/bin/bash 
for((i=2;i<=1000;i++))
do 
  flag=1
  for((j=2;j*j<=i;j++))
  do 
    if((i%j==0));then
      flag=0
      break
    fi 
  done 
  if((flag==1));then 
    echo $i
  fi 
done

脚本二:

#!/bin/bash 
vector=()
for((i=0;i<=1000;i++))
do 
  vector[i]=1
done  

for((i=2;i*i<=1000;i++))
do
  if((vector[i]==1));then 
    flag=1
    for((j=2;j*j<=i;j++))
    do 
      if((i%j==0));then
        flag=0
        break
      fi
    done 
    if((flag==1));then 
      for((n=2;i*n<=1000;n++))
      do 
        vector[i*n]=0
      done 
    fi 
  fi 
done 

for((i=2;i<=1000;i++))
do 
  if((vector[i]==1));then 
    echo $i  
  fi 
done

 脚本三

#!/bin/bash 
for i in `seq 1 2 1000`;do
  tmp=$(echo "sqrt($i)" | bc)
  flag=1
  j=2
  while ((j * j <= i));do 
    if [ $(( i % j )) -eq 0 ];then 
      flag=0
      break 
    fi
    ((j++))
  done 
  if [ $flag -eq 1 ];then 
    echo $i
  fi 
done  

重要补充:关于循环条件的几种写法评析

在循环中使用 ((i = 1; i <= 1000; i++))seq 1 1000,或者{1..1000}都可以,这三种方法都是很常见的迭代方法。不过,这些方法有一些区别和优劣,可以根据具体情况进行选择。

((i = 1; i <= 1000; i++))是Bash中的算术扩展语法,这种语法通常使用在复杂的算术运算或者循环中,语法简单清晰,运行效率也较高。如果需要在循环中使用大量的算术运算,这种语法可能更合适。

seq 1 1000则是一个单独的命令,可以生成一个数字序列,语法也相对简单。如果需要在循环中使用不规则的数字序列,比如只需要奇数或者偶数,或者指定一个步长,这种语法可能更方便。

{1..1000}是Bash中的花括号扩展语法,可以快速生成数字序列。这种语法最大的优势在于其简洁性和易读性,可以在代码中快速生成简单的数字序列。但是需要注意的是,这种语法在其他Shell中可能不被支持。如果代码需要在其他Shell中运行,建议使用其他的循环语法。

你可能感兴趣的:(linux学习,linux)