如何实现每行最后一个指定字符转换

如有以下414.txt文件

shdgaghds_ghsdfak_fgs_1
hdgfajfdg_SDa_sDFD_dFA21
SADHFJ_SA_Dfsd_zxcv_2_1
jasdbja_DS_FvadvF_dfvE_dv
dsahh_Vae_zxva_dv_12_dva
dsahfa_agf_veqr_afd

如何实现将最后一个“_”替换为“ ”

cat 414.txt | while read line; do left=${line##*_}; right=${line%_*}; echo "$right $left"; done

echo ${line##*_}  是从左往右读取最后一个_,删除“_”及其左边的内容

echo ${line%_*}   是从右往左读取第一个_,删除“_”及其右边的内容

如果要echo变量的内容,需要注意格式问题

#下面两种方式输出结果一致
left=${line##_*}
left=$(echo ${line##_*})

问题是:终端运行正常,放在脚本里right变量出错

PS:换了个服务器运行脚本,运行结果正常

历程:

最开始想用sed定位到每行最后一个“_”,好像实现不了

grep也抓取不到

参考:

shell中取字符串子串的几种方式 截取substr - 寒星12345678999 - 博客园 (cnblogs.com)

linux sed 替换(整行替换,部分替换)、删除delete、新增add、选取 - 十年如一..bj - 博客园 (cnblogs.com)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值