方法1:使用sed命令(推荐)
sed是流编辑器,适合大文件快速处理。
基本语法:
sed -i 's/^/要追加的内容/' 文件名
- 示例:给
file.txt每行首添加(注释符)sed -i 's/^/# /' file.txt
- 关键参数:
-i:直接修改原文件(备份原文件用-i.bak)
s/^/.../:^匹配行首,替换为指定内容。
适用场景:
- 快速处理大文件(百万行级)
- 需直接修改原文件时
方法2:使用awk命令
awk适合复杂逻辑处理,可定制性强。
基本语法:
awk '{print "前缀" $0}' 原文件 > 新文件
- 示例:行首添加
INFO:并生成新文件awk '{print "INFO: " $0}' file.txt > newfile.txt - 直接修改原文件(需借助临时文件):
awk '{print "PREFIX:" $0}' file.txt > tmp && mv tmp file.txt
适用场景:
- 需保留原文件 含变量或条件判断(如
awk '/error/{print "ALERT:" $0}')
方法3:使用perl命令
perl兼容正则表达式,处理特殊字符更灵活。
基本语法:
perl -pi -e 's/^/追加内容/' 文件名
- 示例:行首添加
[LOG]perl -pi -e 's/^/[LOG] /' file.txt
- 备份原文件:
perl -i.bak -pe 's/^/TEXT/' file.txt # 备份为file.txt.bak
适用场景:
- 需处理多行或特殊字符(如、
\) - 跨平台脚本需求
方法4:循环逐行处理(Bash)
适合小文件或需交互的场景。
基本语法:
while IFS= read -r line; do echo "前缀$line" done < 原文件 > 新文件
- 示例:添加前缀
DEBUG:while IFS= read -r line; do echo "DEBUG: $line" done < input.txt > output.txt
适用场景:
- 小文件(性能较差)
- 需逐行逻辑控制(如条件过滤)
注意事项
- 备份原文件:
- 使用
sed -i.bak或perl -i.bak自动备份 - 手动备份:
cp file.txt file.txt.bak
- 使用
- 特殊字符处理:
- 含,改用其他分隔符(如
sed 's|^|/path/|')
- 含,改用其他分隔符(如
- 效率对比:
sed>awk>perl>while循环(大文件优先选sed)
- 空行处理:
- 所有方法均会处理空行(追加内容到空行行首),需排除空行可结合正则(如
sed '/^$/! s/^/#/')
- 所有方法均会处理空行(追加内容到空行行首),需排除空行可结合正则(如
总结建议
- 日常快速操作:用
sed -i 's/^/内容/' - 保留原文件:用
awk重定向到新文件 - 复杂逻辑:选
awk或perl - 安全提示:操作前备份数据,测试后再处理关键文件
引用说明:本文方法基于GNU Coreutils(sed/awk)、Perl 5及Bash标准工具,验证环境为Ubuntu 22.04/CentOS 7,第三方工具需确保安装基础软件包(如
perl、gawk)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5431.html