【shell】shell字符串分割|文件分割|剪切|截取

本文介绍了Linux shell中处理字符串和文件的方法,包括使用awk、变量替换、IFS变量、tr指令进行字符串分割,利用split、cat进行文件分割与合并,以及行截取和正则表达式的应用。还详细讲解了awk内置函数split、substr和length的使用。
摘要由CSDN通过智能技术生成

目录

一、字符串分割

1、awk分割

2、利用shell 中 变量 的字符串替换成空格分割

 3、设置分隔符,通过 IFS 变量 

4、利用tr 指令实现字符替换

二、文件分割

按行切割

按时间切割(符合条件的切割)

三、行截取|截取匹配字符(串)前半段/后半段

附录

linux下awk内置函数的使用(split/substr/length)

四、gsub函数

五、正则表达式

Shell:字符串的分割截取


一、字符串分割

1、awk分割

print 截取

awk  '{print substr(,1,8)}' 打印所有列的1-8字节

awk '{print substr($1,1,8)}'  打印1列的1-8字节

awk '{print substr($1,7)}'  打印1列的7-最后所有字节

spiit

把 ceph_12.2.1.centos.x86_64.tar.gz-2021-10-08-08后面的2021-10-08-08按“-”分割,取最后一个数字。

#split($1, arr, "-") ,把第一列,以“-”为分割符分割,把分割得到的结果放入arr数字中。(arr数组从1开始)

echo "ceph_12.2.1.centos.x86_64.tar.gz-2021-10-08-08"|awk '{split($1, arr, "-"); print arr[5]}' 

如果要以双引号作为分隔符则需要转译:awk '{split($1, arr, "\"")

#注意split是awk的内置函数,更多见文章末尾

2、利用shell 中 变量 的字符串替换成空格分割

原理:

${parameter//pattern/string} 

用string来替换parameter变量中所有匹配的pattern

参考文章: Shell_Shell 脚本中字符串的相关操作_迎难而上-CSDN博客

string="hello,shell,split,test"  中的“,”替换成空格后赋值给array 就成了数组赋值

#!/bin/bash
 
string="hello,shell,split,test"  
array=(${string//,/ })  
 
for var in ${array[@]}
do
   echo $var
done

 3、设置分隔符,通过 IFS 变量 

原理

自定义IFS变量, 改变分隔符, 对字符串进行切分

参考文章:

Shell中的IFS解惑_Simple life-CSDN博客  

#!/bin/bash
string="hello,shell,split,test"  
#对IFS变量 进行替换处理


OLD_IFS="$IFS"  #保存当前shell默认的分割符,一会要恢复回去
IFS=","                  #将shell的分割符号改为,“”
array=($string)     #分割符是“,”,"hello,shell,split,test" 赋值给array 就成了数组赋值
IFS="$OLD_IFS"  #恢复shell默认分割符配置
for var in ${array[@]}
do
   echo $var
done

4、利用tr 指令实现字符替换

原理

由于只是对单个字符进行的替换,则可以用  echo args |   tr "oldSpilt" "newSpilt"  的方式实现。

r 指令讲解

背景介绍

tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

语法
tr(选项)(参数)
选项
  -c或——complerment:取代所有不属于第一字符集的字符;
  -d或——delete:删除所有属于第一字符集的字符;
  -s或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
  -t或--truncate-set1:先删除第一字符集较第二字符集多出的字符。
参数
  字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数“字符集2”指定转换的目标字符集。但执行删除操作时,不需要参数“字符集2”;
  字符集2:指定要转换成的目标字符集。

#!/bin/bash
 
string="hello,shell,split,test"  
array=(`echo $string | tr ',' ' '` )  
 
for var in ${array[@]}
do
   echo $var
done

 

Shell_Linux Shell 中实现字符串切割的几种方法_迎难而上-CSDN博客_shell 字符串分割

二、文件分割

按行切割

基础版

split   -l  1000  test.txt  -d  -a  3  test_

-l:按行分隔,每1000行切割test.txt文件
-d:添加数字后缀
-a:以3位数数字做尾数
test_:分割后的文件的前缀

升级版

split   -l  1000  test.txt  -d  -a  3  test_split_&&ls|grep test_split_ | xargs -n1 -i {} mv {} {}.txt

在基础版的结果上,先执行ls命令,查找test_split_开头的文件,然后逐个重命名为.t

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值