如何用sed/awk提取行号并替换特定格式的文件头行?
解决方案
用 sed 快速处理
直接用sed的正则替换就能搞定,命令如下:
sed -E 's/^\/\/.*\|([0-9]+)\|$/>\1/' 你的文件名.txt > 处理后文件名.txt
命令说明:
^\/\/:锁定以//开头的行,避免误改其他行.*\|([0-9]+)\|$:匹配行尾被|包裹的数字行号,括号里的[0-9]+就是要提取的行号,用\1反向引用这部分内容>\1:把整行替换成>加上提取到的行号-E:开启扩展正则模式,不用给括号加转义符,写法更简洁
用 awk 实现的另一种思路
如果觉得sed的正则看着绕,awk的分步处理更直观:
awk '/^\/\// { sub(/.*\|/, ">"); sub(/\|$/, ""); print; next } 1' 你的文件名.txt > 处理后文件名.txt
命令说明:
/^\/\//:只处理以//开头的头行sub(/.*\|/, ">"):把从行首到最后一个|的所有内容替换成>sub(/\|$/, ""):删掉行尾剩余的|print:输出处理后的行next:跳过后续逻辑,直接处理下一行1:对非头行的文本内容,直接原样输出
内容的提问来源于stack exchange,提问作者Alex Krohn
相关产品推荐
相关产品推荐

