如何用grep与正则表达式实现文本重排?(Vim环境)
文本转换实现方案
Vim编辑器内操作
直接在Vim中使用正则替换命令即可完成转换:
- 打开目标文件后,进入命令模式(按
Esc键) - 执行以下替换命令:
:%s/\(name\)_\(\d\+\)_\(extratext\)/\1_\3_\2/g
- 正则说明:
\(name\)捕获字符串开头的name部分\(\d\+\)捕获中间的数字序列(支持多位数)\(extratext\)捕获末尾的extratext部分- 替换后的
\1_\3_\2将捕获的三部分重新排列,把数字移到最后
命令行(grep+sed)方式
grep本身仅用于匹配筛选文本,需配合sed完成修改:
# 从input.txt中筛选符合格式的行并转换,输出到output.txt grep -E 'name_[0-9]+_extratext' input.txt | sed -E 's/(name)_([0-9]+)_(extratext)/\1_\3_\2/' > output.txt
grep -E启用扩展正则,筛选出目标格式的行sed -E用扩展正则完成替换逻辑,和Vim中的替换规则一致
内容的提问来源于stack exchange,提问作者user191919
相关产品推荐
相关产品推荐

