如何仅替换 bash 中的单个换行符?

How to replace ONLY single newlines in bash?

我想知道是否有办法使用 awk 或 sed 修复记录之间的换行符并仅替换文本文件中的单个 \n(换行符)字符?目前我的代码正在用“|”替换所有换行符.但我需要它只替换单个换行符而不是双或多个。

如果每条记录都用管道分隔,那么我将能够修复换行符,但我不知道该怎么做。

这是我的 select 获取摘录的查询 :-

select a."rec1" || "|" || a."rec2" || "|" || a."rec3" || "|" || a."rec4" || "|" || a."rec5" || "|" || a."rec6" from tab_1 a
union
select select b."rec1" || "|" || b."rec2" || "|" || b."rec3" || "|" || b."rec4" || "|" || b."rec5" || "|" || a."rec6"  from tab_2 b
union
select select c."rec1" || "|" || c."rec2" || "|" || c."rec3" || "|" || c."rec4" || "|" || c."rec5" || "|" || a."rec6" from tab_3 c

我有多个 select 查询,我联合起来以获得所需的提取物。我想打印“|”在每列记录之后。这样,该列的所有记录都必须包含在管道之间,包括最后一列记录。所需的输出必须如下所示:

所需的提取输出:

||rec 3|rec 4|rec 5|rec 6|
rec 1|rec 2|rec 3|rec 4|rec 5|rec 6|
|rec 2|rec 3|rec 4|rec 5|rec 6|

提取输出:

||rec 3|rec 4|rec 5|rec 6
rec 1|rec 2|rec 3|rec 4|rec 5|rec 6
|rec 2|rec 3|rec 4|rec 5|rec 6

注意:- 每列都已用 | 分隔象征。因此,如果在第一行的情况下该特定列中没有记录,则管道之间不会显示任何内容。理想情况下,如果每一列都有记录,则文件将如下所示:

记录 1|记录 2|记录 3|记录 4|记录 5|记录 6

所需的输出应如下所示:

rec 1|rec 2|rec 3|rec 4|rec 5|rec 6|

|rec 1|rec 2|rec 3|rec 4|rec 5|rec 6

这样每条记录(如果存在)将在删除换行符后包含在管道之间,如下所示:-

||rec 3|rec 4|rec 5|rec 6|rec 1|rec 2|rec 3|rec 4|rec 5|rec 6||rec 2|rec 3|rec 4|rec 5|rec 6|

使用此 select 查询获取“|”每列记录之间。

select a."rec1" || "|" || a."rec2" || "|" || a."rec3" || "|" || a."rec4" || "|" || a."rec5" || "|" || a."rec6" || "|" from tab_1 a
union
select select b."rec1" || "|" || b."rec2" || "|" || b."rec3" || "|" || b."rec4" || "|" || b."rec5" || "|" || a."rec6" || "|" from tab_2 b
union
select select c."rec1" || "|" || c."rec2" || "|" || c."rec3" || "|" || c."rec4" || "|" || c."rec5" || "|" || a."rec6" || "|" from tab_3 c

获得提取物后,您可以使用下面的 awk 和 tr

删除换行符和管道
awk -F'\n' -v RS= -v OFS='' '{=;printf "%s", [=11=] RT}' extract.txt | tr '|' '\n' | awk 'NF >0'  extract.txt > final_extract.txt