如何用sed/awk为列表添加前缀文本并追加递增序号?
用sed或awk实现文本转换的解决方案
错误原因分析
你写的sed命令语法错误,sed的替换操作必须通过s/匹配规则/替换内容/格式实现,你未使用s命令,直接将#define写在匹配模式后,导致sed误将其识别为命令,从而报错。
方法一:使用awk实现(简洁直观)
awk自带行号变量NR,可直接利用它生成序号,同时通过printf控制输出格式实现对齐:
awk '{printf "#define LOG_FILE_%s\t\t%d\n", $0, NR}' input.txt
如果需要和示例完全一致的对齐效果,可指定字段宽度精准控制:
awk '{printf "#define LOG_FILE_%15s %d\n", $0, NR}'
$0代表当前行的全部内容NR代表当前处理的行号(从1开始自动递增)- 调整
%15s中的数字,可控制宏名称部分的宽度,确保序号对齐
方法二:使用sed实现
sed需要结合内容替换和行号输出两步完成:
sed 's/^/#define LOG_FILE_/' input.txt | sed '=' | sed 'N;s/\n/ /'
分步解释:
- 第一个
sed命令:给每行开头添加#define LOG_FILE_前缀 - 第二个
sed '=':在每行内容下方输出对应的行号 - 第三个
sed命令:将行号与上一行内容合并,把换行符替换为足够空格实现对齐
内容的提问来源于stack exchange,提问作者lord_nimon
相关产品推荐
相关产品推荐

