当模式匹配时,我需要分割行并将其打印到下一行。
就像我有:
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”开头的字段前面添加换行符。最后它消除了第一个换行符并打印