shell的随记(十)

一、第一行删掉最后一个字母 第二行删掉倒数第二个字符第n行就删掉倒数第n个字母,有什么方法可实现?

ABCDEFG
ABCDEFG
ABCDEFG
ABCDEFG
ABCDEFG

awk解题:

awk 'BEGIN{FS=OFS=""}{if(NF>=NR)$(NF-NR+1)="";print}' txt

在这里插入图片描述
分析:
在这里插入图片描述

二、正则如何取最后一个括号里的内容。 (您好)我是中国人(是的)

#1
(?<=)[\u4e00-\u9fa5]{
    
    2}(?!.*[\u4e00-\u9fa5]{
    
    2})(?=)

#2
echo '(您好)我是中国人(是的)啊啊啊啊' | grep -Po '.*(\K[^)]+'

#3
sed -r 's#.*((.*?))$.*#\1#' zhongwen.txt

在这里插入图片描述
在这里插入图片描述

三、现在要通过shell实现第一天打印00,01,02,03,04,第二天打印05,06,07,08,09,…第十天打印45,46,47,48,49,然后第十一天重新从00开始。。一直这样循环。

test.sh内容:

#	seq -w 0 49 | xargs -n 5 > 1.txt
#!/bin/bash
#1.txt 内容为 seq -w 0 49 | xargs -n 5
currPath=/root/shellDir/program/testFile/1.txt
lineNum=`seq -w 0 49 | xargs -n 5 | wc -l`
IFS=$'\n'
#set -x

indexNum=0
for i in  `cat $currPath`
do
        #echo $i
        arrayA[$indexNum]=$i
        let indexNum+=1
done

#echo ${arrayA[*]}
count=1
while [ 1 ]
do
        echo ${
    
    arrayA[$((count-1))]}
        let count+=1
        sleep 1s

        if [ $count -gt 10 ];then
                count=1
                echo -e "\n\n num reset...."
        fi
done
	

运行结果
在这里插入图片描述
其他带哥的思路写法:
1、
在这里插入图片描述

2、

用定时任务加一个临时文件,文件里写满00到49,定时任务每次从里面读5行,顺便把读读到的5行去掉并追加到文件尾部

四、jot指令

jot源码包:
https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/athena-jot/9.0-7/athena-jot_9.0.orig.tar.gz

jot跟seq作用差不多,就是有的地方更方便
在这里插入图片描述
在这里插入图片描述
上面的图可写成:
在这里插入图片描述
比seq扩展出更多的东西,按顺序列出字母
在这里插入图片描述
等差序列
在这里插入图片描述
从-1到1,平均分成11份
在这里插入图片描述

五、如何根据‘-’前面的数字,从小到大排序

1-aa
2-sa
3-aad
41-aac
55-qa
61-aa
7-qa
8-aa
9-aa
12-bb
15-vv
``
解法1  sort:
```shell
sort -t"-" -k1 -n 2.txt

在这里插入图片描述
解法2 awk:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Nightwish5/article/details/110850333
今日推荐