Shell_字符串操作(sed命令操作文本和数字自增方式)

本文介绍了Shell脚本中如何指定解析器、切割和替换字符串、声明数组、条件判断以及循环操作。通过示例展示了如何使用for循环遍历数组、grep命令以及sed进行文本操作。同时,讲解了Shell中的自增操作。内容涵盖了Shell脚本的基础语法和实用技巧。
摘要由CSDN通过智能技术生成

参考

shel字符串操作

#! /bin/bash

它的作用就是告诉shell的脚本使用哪种解析器来执行的脚本(不指定系统默认使用当前的shell进行解释执行),shell有很多种常见的sh,bash,csh,tcsh,zsh等。这行很关键,少了就不能执行你的代码。

切割字符串

文本中数据格式为: a1,a2以逗号为分隔符。将逗号替换为空格,再定义数组对象即可。

filepath="… …"
while read line
do
array=(${line//,/ })

    for var in ${array[@]}
    do
            echo $var
    done

done < $filepath

array=(${line//,/})这里是空白,shell数组的声明使用空白来分离的:

${parameter//pattern/string}
用string来替换parameter变量中所有匹配的pattern

if后面的判断条件 方括号和之间的判断语句左右各要有一个空格

字符包含

注意的是if里面的双[[ == ]]和双等于

if [[ $string =~ $sub ]]

if [[ s t r i n g = ∗ string = * string=sub* ]]

if [[ s t r i n g =   . ∗ string =~ ^.* string= .sub.*$ ]]

巧妙的利用grep亦可:

result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
echo "----------------------------------------------------------------------------"
json='{"jobs":[{"id":"ff6f61628a88e4d492e6b4f45788be06","status":"RUNNING"}]}'

if [[ $json == *'"status":"RUNNING"'* ]]
then
	echo "RUNNING"
else
	echo "FAILED"
fi


echo "----------------------------------------------------------------------------"

for循环遍历

arrays=(110 120 119)
for phone_num in ${arrays[@]}
do
echo $phone_num
done

sed操作文本

sed直接操作文本需要加一个-i,即保存修改文本。

sed不可直接操作空文本,建议判断后:wc -l file.txt 是否为0,后赋予内容echo ‘’ >> file.txt ,再操作。

sed中$表示最后:

sed -i '$a\insert into last row' file.txt

在这里插入图片描述

未加-i

sed '3d' params2.txt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wEeSFOmN-1611128646345)(C:\Users\廖兴广\AppData\Roaming\Typora\typora-user-images\image-20210115165136211.png)]

cat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mczlnQJC-1611128646348)(C:\Users\廖兴广\AppData\Roaming\Typora\typora-user-images\image-20210115165147707.png)]

加入-i

sed -i '1c\hello world' params2.txt

cat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTKGxLL5-1611128646354)(C:\Users\廖兴广\AppData\Roaming\Typora\typora-user-images\image-20210115165248052.png)]

配合readline

filepath=index=0
while read line
do
((index++))
sed -i ${index}'c\dynamic' ${filepath}
done < ${filepath}
echo 'index='$index

输出结果:index=文本行数,且每个文本行被改变

其它扩展

这里的acdi等是指的是行数后面的参数:

sed -i ‘$a\insert into last row’ file.txt

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
  • 引用来源菜鸟教程

Shell自增

  1. i=expr $i + 1;
    2. let i+=1;
    3. ((i++));
    4. i= [ [ [i+1];
    5. i=$(( $i + 1 ))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长臂人猿

客官们众筹请博主喝杯奶茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值