使用shell脚本在文件中插入CR字符

时间:2018-06-08 08:40:28

标签: string bash shell file unix

我有一个巨大的单个数据块,我希望通过在某些已识别的模式之前插入回车符来分割成行。 (在这个阶段,我不想使用linux split命令)。

所以我在看:

  1. 如何识别数据块中的模式
  2. 如何在模式起始位置之前插入CR。
  3. 示例:

    该块为1234abcde56785abcde53453FEFDabcde

    结果应该在文件中看起来像这样:

    1234
    abcde56785
    abcde53453FEFD
    abcde
    

    感谢社区!

2 个答案:

答案 0 :(得分:1)

您的模式根本不易理解,所以下次请尝试添加一些信息:

您可以使用以下sed命令:

echo "1234abcde5678abcde53453FEFDabcde" | sed -E 's/(abcde[0-9]*[A-Z]*)/\n\1/g'                                                
1234
abcde5678
abcde53453FEFD
abcde

如果您需要Windows EOL,请将其更改为

sed -E 's/(abcde[0-9]*[A-Z]*)/\r\n\1/g'

有关sed的解释:

  • -E用于扩展正则表达式支持,否则您需要转义(,),+,{,}
  • 等字符
  • s/PATTERN/REPLACEMENT/g命令以全局模式查找和替换

关于正则表达式的解释:

demo

  • ()用于分组和反向引用
  • abcde[0-9]*[A-Z]*为了匹配以abcde开头的所有内容,最后是一些数字,最后是一些大写字母:

正则表达式的起点:http://www.rexegg.com/regex-quickstart.html

答案 1 :(得分:1)

根据您显示的输出完全不确定您的要求,请您试试,如果有帮助请告诉我。

awk '{gsub(/abcde/,"\n&")} 1' Input_file

OR(如果abcde字符串不一直是相同的,它可能是任何小写字母)

awk '{gsub(/[a-z]+/,"\n&")} 1'  Input_file