shell 截取字符串

shell 截取字符串(cut, sed, awk)

cut

-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d:自定义分隔符,默认为制表符。
-f:与-d一起使用,指定显示哪个区域。
-n:取消分割多字节字符。仅和-b标志一起使用。如果字符的最后一个字节落在由-b标志的List参数指示的范围之内,该字符将被写出;否则,该字符将被排除。
-b
.eg1:然后调用cut,即剪切字符串中的第2和第5个字节。
echo"123abc"|cut -b 2,5
-----------------------
输出为2b
eg2:cut掉11-14位置的字符
echo "123456789abcdefghjklmnopq" | cut -b 11-14
-----------------------------------------------
输出为bcde
-c
用法示例输出/etc/passwd文件每一行的前4个字符$ sudo cut -c 1-4 /etc/passwd
-d
cut命令用于列提取,默认分隔符是tab键。
选项:-d指定分隔符,-f指定提取第几列
eg1: 以%作为分隔符 输出第一个%前的区域1的东西,输出区域2的东西
root@ROUTER:~# echo "CPU: busy 14% (system=10% user=3% nice=0% idle=85%)" | cut -d \% -f 1
CPU: busy 14
root@ROUTER:~# echo "CPU: busy 14% (system=10% user=3% nice=0% idle=85%)" | cut -d \% -f 2
(system=10
root@ROUTER:~# echo "CPU: busy 14% (system=10% user=3% nice=0% idle=85%)" | cut -b 11-14 | cut -d \% -f 1
14
root@ROUTER:~# echo "CPU: busy 14% (system=10% user=3% nice=0% idle=85%)" | cut -b 11-14
14%

sed

eg1:去除文本中的所有数字
sed 's/[0-9]//g'
[0-9]匹配一个数字,
s/A/B/ 将A替换为B
g表示全局替换为空格
eg2:取当前的接口的ip,把所有的:替换为空格,然后打印出空格为分割的第几个数
root@Evelyn:~# ifconfig ens33 | grep Bcast | sed 's/:/ /g' | awk '{print $3}'
192.168.23.44
eg3:取出延时时间的数字
ping 192.168.120.1 -s 1000 -c 5 | grep time | sed 's/=/ /g' | awk '{print $10}'

awk

语法格式:awk '条件1{动作1}条件2{动作2}...' 文件

条件,一般使用关系表达式作为条件,如a>10。动作,格式化输出或流程控制语句

awk一次读入一整行,默认以tab键或者空格为分隔符将一行分为多个字段,表示为12、3...0表示文件名

start_line=`grep -in 'set task group' $ROOTPATH/../../core/helloworld.c |awk 'BEGIN {FS=":"} {print $1}'`
posted @   michaelchengjl  阅读(414)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示