行を分割し、特定の文字を使用して新しい行に印刷します。

行を分割し、特定の文字を使用して新しい行に印刷します。

パターンが一致する場合は、行を分割して次の行に印刷する必要があります。

私が持っているように:

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

ABCパターンが表示されたら新しい行で印刷したいです。

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

答え1

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

このコマンドは、ABCが続く改行文字sedのすべてのインスタンスを置き換えます。一致の一部(前にスペースを入れずに)をキャプチャして置換項目に含めるために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

これを試してみてください。

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」で始まるフィールドの前に改行文字を追加します。最後に、最初の改行文字を削除して印刷します。

関連情報