如何在bash脚本中用'\ n'连接所有行

时间:2019-11-23 16:39:50

标签: bash sed

我正在编写一个bash脚本,该脚本调用vim来修改另一个文件,然后使用'\ n'连接文件中的所有行。 我在脚本中尝试过的代码:

vi filefff (then I modify the text in filefff)
cat filefff
new=$(cat filefff | sed 'N;N;s/\n/\\n/g')
echo $new

问题出在这里

例如,如果文件中有两行:第一行aa,第二行 bb,

aa
bb

然后将文件更改为:

aa
bb
cc
dd
ee

echo $new的结果为aa“ \ n” bb cc“ \ n” dd ee“ \ n”。该命令仅加入了某些行。

然后我再添加一些行:

aa
bb
cc
dd
ee
ff
gg
hh

结果是aa“ \ n” bb cc“ \ n” dd ee“ \ n” ff,“ hh”消失了。

所以我想知道为什么以及如何用'\ n'连接所有行,无论我要在文件中追加多少行。

1 个答案:

答案 0 :(得分:0)

作为注释建议的'sed'或'tr'解决方案的增强,它可以产生非常长的行,请考虑以下选项,它可以产生更人性化的输出,并允许最大行长上限(200 in下面的示例)

# Use fold to limit line length
cat filefff | tr '\n' ' ' | fold -w200

# Use fmt to combine lines
cat filefff | fmt -w200

# Use xargs to format
cat filefff | xargs -s200

请注意,如果提供空行,则'fmt'将假定需要换行。