方法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