bash - 在 bash 中将 CSV 输出为单个字符串,无需额外安装
问题描述
我有一个 CSV 文件,其中包含如下数据:
1, 2, 3
A, B, C
4, 5, 6
我试图在 bash 中将其输出为由换行符分隔的单个字符串,如下所示:
"1, 2, 3\nA, B, C\n4, 5, 6"
我尝试了很多方法,但还没有奏效。谢谢你的帮助!
编辑:
根据提供的答案,由于我的代码的其他用户可能需要相同的转换并且我不能保证他们的系统上有什么,仍然在寻找答案,而与我是否有无关:
- 安装了 GNU sed
- Windows 行尾与否
- 已
dos2unix
安装
解决方案
我不确定您是想在 bash 中使用预期的输出还是想在其他地方使用指定的输出。以下是两种情况的两个答案:
用引号替换换行符\n
并添加周围的"
引号
在这种情况下,您的问题是重复的——至少是用文字\n
s 替换换行符的部分。最简单的解决方案是
sed -z 's/\n/\\n/g;s/.*/"&"/' yourFile
提供 GNU sed
。
如果您的文件以换行符结尾(如文本文件通常那样),您的字符串也会:
"1, 2, 3\nA, B, C\n4, 5, 6\n"
如果您不想要尾随,\n
您可以在实际处理之前将其排除:
sed -z 's/\n$//;s/\n/\\n/g;s/.*/"&"/' yourFile
"1, 2, 3\nA, B, C\n4, 5, 6"
在单行 bash 字符串中编码多行文件
printf
使用 bash的内置%q
格式。来自help printpf
:
%q
以可以重用为 shell 输入的方式引用参数
要将文件内容传递给 printf,请使用 subshell:
printf %q "$(< yourFile)"
这将使用 bash 的 C 字符串格式,因为在双引号字符串\n
中不被视为换行符"..."
:
$'1, 2, 3\nA, B, C\n4, 5, 6'
推荐阅读
- rotation - Halcon - 旋转姿势
- javascript - 根据另一个数组中的值从数组中删除对象
- powershell - 外壳 | 导入 .csv 文件
- pytorch - “加载共享库时出错:libnvinfer.so.7:无法打开共享对象文件:没有这样的文件或目录”运行 TRTorch 示例时
- debugging - 使用 OpenOCD 调试 STM32F767 - 未知设备 ID 问题
- python - 通过烧瓶渲染模板传递给 html 文件的文本格式不正确
- angular - 角度重新加载组件不起作用
- react-native - 如何在 react native 中获取设备的应用程序、图像和视频列表?
- qt - 为 Raspberry Pi 4 交叉编译 QtWebEngine
- python - 如何多次并行运行单个python函数