分割行并将其打印到特定字符的新行

分割行并将其打印到特定字符的新行

当模式匹配时,我需要分割行并将其打印到下一行。

就像我有:

ABC123xxx:: 2345 ABC345yyy:: 5678 ABC986zzz:: 7955

我希望它在ABC模式出现时打印到新行:

ABC123xxx:: 2345
ABC345yyy:: 5678
ABC986zzz:: 7955

答案1

sed -E -e 's/ (ABC)/\n\1/g' 

sed命令将 的任何实例替换ABC为换行符后跟 ABC。它使用 来()捕获匹配的一部分(ABC没有前导空格)并将\1其包含在替换中。

例如

$ echo 'ABC123xxx:: 2345 ABC345yyy:: 5678 ABC986zzz:: 7955'| 
    sed -E -e 's/ (ABC)/\n\1/g'
ABC123xxx:: 2345
ABC345yyy:: 5678
ABC986zzz:: 7955

答案2

sed

$ sed -e 's/ ABC/\
ABC/g' <file
ABC123xxx:: 2345
ABC345yyy:: 5678
ABC986zzz:: 7955

答案3

试试这个 awk。

echo "ABC123xxx:: 2345 ABC345yyy:: 5678 ABC986zzz:: 7955" | awk '{for(i=1;i<=NF;i++) if(match($i,"ABC")>0) line=line "\n"$i;else line=line $i; sub("^\n","",line); print line}'

创建包含所有字段的行,并在以“ABC”开头的字段前面添加换行符。最后它消除了第一个换行符并打印

相关内容