ファイルでカンマを含む行を検索し、それを前の行に置き換えたい場合

ファイルでカンマを含む行を検索し、それを前の行に置き換えたい場合

以下のように、複数行に単一のコンマを含む test.txt ファイルがあります。

$ cat test.txt
ABCD
Test,plan
Sample
Working
Tester,Developer
Learn
Teach
Study
Coding
Stack,exchange

必要な出力は次のとおりです。

ABCD
ABCD
Sample
Working
Working
Learn
Teach
Study
Coding
Coding

Unixコマンドを使用して上記の内容を印刷する方法が見つかりません。このカンマ行検索を処理し、上記の行に置き換える方法を教えてください。

交換するかどうかわからない場合は、次の検索をお試しください。

#Searching comma
sed -i 's/,/replace_above_line/g' test.txt

カンマを含むファイルの前の行にグローバル置換を実行したいと思います。

答え1

sed場合、パターン空間に2行を維持する必要があります。

sed -i -e '$!N;s/\(.*\)\n.*,.*/\1\n\1/' -e 'P;D' file

または を使用して、カンマ行( )の前の各行をed表示し、コピー( )して戻って元の行を削除することもできます( )。g/,/-1t-1d

$ ed -s file
g/,/-1t\
-1d
wq

または1行で:

printf '%s\n' g/,/-1t\\ -1d wq | ed -s file

関連情報