如有以下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)
171万+

被折叠的 条评论
为什么被折叠?



