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

标签 bash awk sed plsql

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

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

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

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

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

所需的提取输出:

||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 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='' '{$1=$1;printf "%s", $0 RT}' extract.txt | tr '|' '\n' | awk 'NF >0'  extract.txt > final_extract.txt

关于bash - 如何在 bash 中仅替换单个换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71950033/

相关文章:

regex - 使用 sed linux 交换列

bash - 使用 OpenSSL 生成质数

linux - 去除多个文件中的公共(public)字符串并复制它们

scripting - 如何使用 sed 或 awk 删除符合某些字段条件的行?

git - 使用 bash awk 从 git log 发布说明

html - SED 匹配任何文本文件中的多个字符串挂起且未完成

php - Bash one liner - 测试一个文件是否存在,如果它有其他错误退出

bash - 如何从在 docker 主机中运行的主机运行复杂的 docker 命令?

awk - 使用 awk 过滤文件并在输出中保留标题

bash - 在/etc/hosts 文件中添加行