是否可以仅替换两个已知字符串之间的字符?我有许多格式为
的文件 title.header.index.subtitle.goes.here.footer
我可以选择“subtitle.goes.here”,索引(我需要反向引用)和页脚(它是常量)之间的模式匹配,但我想用一个句点替换句点/点字符强调,给我
title.header.index.subtitle_goes_here.footer
所以来自
等输入 title.header.01.the.first.subtitle.is.here.footer
我想以
结束 title.header.01.the_first_subtitle_is_here.footer
到目前为止,我没有用,但是一个开始:
sed -r 's/([0-9][0-9]\.)([a-z]*\.*)*footer/\1footer/g'
但这是删除整个字幕和页脚,然后手动添加它并且还有很多其他缺陷我敢肯定。任何帮助将不胜感激。
答案 0 :(得分:4)
这可能对您有用:
echo "title.header.01.the.first.subtitle.is.here.footer" |
sed 's/\./_/4g;s/.\(footer\)/.\1/'
title.header.01.the_first_subtitle_is_here.footer
一个丑陋的选择:
sed 'h;s/\([0-9][0-9]\.\).*\(\.footer\)/\1\n\2/;x;s/.*[0-9][0-9]\.\(.*\).footer/\1/;s/\./_/g;x;G;s/\(\n\)\(.*\)\1\(.*\)/\3\2/' file
答案 1 :(得分:1)
如果您对awk
解决方案持开放态度,那么这可能有所帮助 -
awk '
{for (i=1;i<=NF;i++) if (i!=NF) {printf (3<i && i<(NF-1))?$i"_":$i"."} print $NF}
' FS='.' OFS='.' file
[jaypal:~/Temp] cat file
title.header.index.subtitle.goes.here.footer
title.header.01.the.first.subtitle.is.here.footer
[jaypal:~/Temp] awk '
{for (i=1;i<=NF;i++) if (i!=NF) {printf (3<i && i<(NF-1))?$i"_":$i"."} print $NF}
' FS='.' OFS='.' file
title.header.index.subtitle_goes_here.footer
title.header.01.the_first_subtitle_is_here.footer