如何在Vi编辑器中为重复路径批量添加不同前缀(万行文档适用)
高效处理Vi中单文档10000+行内容生成权限命令的方法
针对你要处理10000+行的重复路径、生成对应chown和chmod命令的需求,这里有两个实用又高效的方案,不管是直接在Vi内操作,还是结合外部工具都能快速搞定:
方案一:Vi原生正则替换(直接在编辑器内完成)
如果习惯在Vi里操作,直接用全局正则替换就能一步到位,完全不用跳出编辑器。
假设你的输入是像a a b b c c这样一行内的连续重复对,打开文件后按:进入命令模式,执行下面的替换命令:
:%s/\([^ ]\+\) \1/chown user:user \1\nchmod 755 \1/g
命令解释:
%:表示对整个文件的内容进行操作\([^ ]\+\):捕获第一个路径([^ ]\+匹配除空格外的所有字符,比\w\+更适配带特殊字符的路径)\1:匹配和捕获组完全相同的第二个重复路径chown user:user \1\nchmod 755 \1:把每一对重复路径替换成两行对应的权限命令,\n用来换行g:全局替换,确保文件里所有符合条件的重复对都被处理
如果你的内容是每行一个重复项(比如两行连续的a、两行连续的b),只要把正则里的空格换成换行符就行:
:%s/\([^ ]\+\)\n\1/chown user:user \1\nchmod 755 \1/g
方案二:结合sed工具处理超大型文件(性能更优)
如果文件行数特别多(比如几十万行),Vi的原生替换可能会有点卡顿,这时候用外部的sed工具处理会更高效,还能直接生成可执行的脚本文件。
终端直接处理:
在终端里执行这条命令,直接把处理后的结果输出到新文件output.sh里:
sed 's/\([^ ]\+\) \1/chown user:user \1\nchmod 755 \1/g' Test1.txt > output.sh
在Vi内调用sed原地修改:
不想跳出Vi的话,也可以直接在命令模式里调用sed修改当前打开的文件:
:!sed -i 's/\([^ ]\+\) \1/chown user:user \1\nchmod 755 \1/g' %
这里的%代表当前Vi打开的文件,-i参数让sed直接原地修改文件内容。
内容的提问来源于stack exchange,提问作者Mahadevan
相关产品推荐
相关产品推荐

