linux - Bash Shell 脚本:连接不以 ^M 结尾的行
问题描述
这又是一个与 Unix 和 Windows 中的行尾字符有关的问题。
我有一个 sql 提取,其中某些字段可以包含具有换行符的文本。
当我将此提取到 linux 机器并使用 :se list 选项集在 VI 中打开它时,我看到如下文本:
1 some broken Text part 1 - Line1$
2 other broken text part 2 -line 2^M$
3 good line ^M$
我需要检测不以 CARRIAGE RETURN (CR) 或 ^M 结尾的行,并查看它是否包含具有换行符的值。
在上面的摘录中,基本上我需要将第 1 行和第 2 行连接起来,然后拿出一行
1 'some broken Text part 1 - Line1 other broken text part 2 -line 2^M$
第 3 行不应该有任何变化,它将成为文件的第 2 行。
我尝试使用 tr 删除 \n 但随后整个文件在 VI 中仅包含 1 行。删除 \n 后,我尝试将 \r 替换为 \r\n ,但它在文件中引入了意外行为。
任何解决此问题的帮助将不胜感激。
解决方案
你可以\n
用空格和\r
替换\n
:
$ printf 'some broken Text part 1 - Line1
other broken text part 2 -line 2\r
goodline\r\n' > file.txt
$ cat -vE file.txt
some broken Text part 1 - Line1$
other broken text part 2 -line 2^M$
goodline^M$
$ tr '\n\r' ' \n' < file.txt
some broken Text part 1 - Line1 other broken text part 2 -line 2
goodline
推荐阅读
- python - pdfplumber extract_text 函数还从表中提取文本。只想提取表格外的文本
- javascript - 木偶键盘.type()
- vba - 将变量从模块传递到用户表单
- flutter - FutureBuilder 块空问题
- javascript - 如何在 NodeJS 中将 fetch 导入我的 app.js?
- react-native - 如何用 Jest 测试 StackActions?
- java - 查询 DynamoDb 全局二级索引
- scala - Spray-json: [错误] 引用不存在的类 spray.json.package$
- verilog - 如何实现非连续采样点的过渡覆盖?
- image - Azure DevOps 配置文件图片未显示在板上