sed替换每行最后一个字符

本文详细解析了如何使用SED命令进行分组匹配,通过实例演示了如何去除字符串或每行文本的最后一个字符,深入理解SED的-s///g语法及其在文本处理中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

echo 123456789 | sed -n 's/\(.*\)\(.\)/\1/g'
这种方法意思是sed分组匹配。怎么分组呢?先看单引号里的内容。
-n意思是只显示sed处理的行。如果后面跟的是文件,则不会直接修改源文件。会单独加一行匹配到的行。然后单独输出加出来的这一行。
s///g 这是固定语法。匹配替换字符串用的。s/后面这堆乱七八糟的是什么意思呢?慢慢看
先看这个:\(.*\)\(.\)/
刚才说用法是分组匹配,分组关键字是用括号分组。
先看第一个分组(.*)。但是括号需要转义,所以就变成了\(.*\) 这是第一个分组。里面的内容是.*,即正则表达式中的点和星号,意为任意长度任意字符串。也就是说如果我有1个字符串用这个正则能匹配到,有100万1000万个字符也能匹配到。没有也能匹配到哦。因为是任意长度。
第二个分组(.),同样的,先把括号转义。变成了\(.\)。里面的内容同样是正则表达式中的点。意思是任意一个字符串,注意第二个分组和第一个分组所用的正则的区别。
这样,我们就把123456789这个字符串分割成了两组。
第一组是:12345678
第二组是:9
接下来再看这个:/\1/g
第一个斜线是s///g里面中间的斜线,属于固定语法。\1的意思是第一个分组。也就是说这里的\1就等于12345678,为什么1前面要加上反斜线呢。如果不加这个反斜线,就会把匹配到的内容替换成了数字1,所以要加上反斜线转义,告诉sed,我要输出第一个分组。
g是全局匹配。
组合起来看就简单了,我先出输出了123456789,然后用sed分组匹配。分两组,第一组是12345678,第二组是9,然后输出第一个分组。就能实现你说的如何去掉每行最后一个字符。
由于sed处理文件的机制属于从第一行开始读,然后读第二行,第三行...以此类推。
所以这样就能把每行的最后一个字符去掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值