Unix系统下如何将指定文本移至文件末尾?附操作示例
把文件内指定文本移至末尾的Unix操作方法
嘿,作为Unix新手,这个需求其实不难,我给你两种简单好用的方法,针对你给出的示例(将file.txt里的Last移到行尾),一步步来操作:
方法一:使用 sed 正则替换(推荐,适合快速修改)
sed是Unix系统里处理文本的常用工具,用它的正则分组替换就能轻松实现需求:
基本命令(直接修改原文件)
sed -i 's/\(.*\)\(Last\)\(.*\)/\1\3\2/' file.txt
命令解释
-i:直接修改原文件(如果不想直接改动原文件,去掉-i,把结果输出到新文件,比如sed 's/\(.*\)\(Last\)\(.*\)/\1\3\2/' file.txt > new_file.txt)s/\(.*\)\(Last\)\(.*\)/\1\3\2/:核心替换逻辑\(.*\):捕获Last前面的所有内容(示例里是Second)\(Last\):捕获我们要移动的目标文本\(.*\):捕获Last后面的所有内容(示例里是Fourth)\1\3\2:重新排列捕获的内容,把目标文本放到最后
扩展:忽略大小写匹配
如果不确定目标文本的大小写(比如要匹配last/Last/LAST),可以加I选项:
sed -i 's/\(.*\)\(Last\)\(.*\)/\1\3\2/I' file.txt
方法二:使用 awk 处理字段(适合按单词/字段操作的场景)
如果你的文本是用空格分隔的单词(像示例里这样),用awk来遍历字段也很方便:
命令(输出到新文件,先验证效果)
awk '{for(i=1;i<=NF;i++) if($i!="Last") printf "%s ",$i; print "Last"}' file.txt > new_file.txt
命令解释
NF:代表当前行的字段总数(示例里是3个单词,所以NF=3)- 循环遍历每个字段,把不是
Last的字段先打印出来 - 最后单独打印
Last,自然就放到了行尾 - 验证新文件内容正确后,再替换原文件:
mv new_file.txt file.txt
注意事项
- 操作前建议先备份原文件:
cp file.txt file.txt.bak,避免误操作丢失数据 - 如果目标文本包含正则特殊字符(比如
.、*、\),在sed命令里需要用反斜杠转义(比如要移动Last.,就要写成\(Last\.\)) - 如果文件有多行,每行都需要移动指定文本,上面的命令同样适用,会处理每一行的内容
内容的提问来源于stack exchange,提问作者user11069271
相关产品推荐
相关产品推荐

