regex - 替换文件中的\n\t 模式

标签 regex awk sed ksh

好的,我有一个用竖线分隔的记录集

我正在检查每行的分隔符数量,因为它们已经开始包括 |在数据中(我们无法更改传入文件)

在使用awk将坏记录解析成坏文件进行处理时,我们发现有些数据有一个换行符(\n)(后面是一个制表符(\t))

我曾尝试用 sed 将\n\t 替换为\t 但它总是将\n\t 更改为\r\n 或替换所有\n(文件为\r\n 用于行尾)

是的,回答下面的一些问题......

文件可以超过 200 mb

换行符在数据中是虚假的(不是每一行......但足以让人痛苦)

我试过了

sed ':a;N;$!ba;s/\n\t/\t/g' Clicks.txt >test2.txt

sed 's/\n\t/\t/g' Clicks.txt >test1.txt

样本记录

12345|876|测试数据\n
\t\t\t\tsome text|6209\r\n

想要 12345|876|测试数据\t\t\t\tsome text|6209\r\n

请帮忙!!!

注意必须是 KSH(具体为 MKS KSH)

我不在乎它是否是 sed.. 只需要更正问题...

下面的几个解决方案在小数据上唤醒或完成部分工作......

顺便说一句,我已经开始尝试删除所有换行符,然后用回车换行符替换 caraige return .. 但也不能让它正常工作

我试过 TR 但因为它是单个字符,所以它只解决了部分问题

tr -d '\n' 测试.txt 留给我一个\r 结束的文件....

需要将其设置为\r\n(并且此系统上不存在 dos2unix 或 unix2dos)

最佳答案

如果输入文件很小(因此您不介意处理两次),您可以使用

cat input.txt | tr -d "\n" | sed 's/\r/\r\n/g'

编辑: 正如我现在应该知道的那样,您可以避免在任何地方使用 cat。 我已经在 SO for UUOC 中查看了我的旧答案,并仔细检查了 tr 用法中可能的文件名。正如 Ed 在他的评论中指出的那样, cat 也可以在这里避免:

上面的命令可以改进

tr -d "\n" < input.txt | sed 's/\r/\r\n/g'

关于regex - 替换文件中的\n\t 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30333282/

相关文章:

regex - 帮助使用正则表达式 - 提取文本

sed - 提取字符串之间的子字符串

java - java中JsonPath解析json错误

regex - 如何使用反向引用通过正则表达式查找具有三个或更多元音(同类)的单词?

awk - 文本处理 : sed to work backwards to delete until string

awk - golang 命令即使手动执行也不起作用

regex - 在输出中查找并替换为正则表达式

java - 正则表达式语句(replaceAll)

regex - 使用 POSIX BRE/ERE 正则表达式将 IP 地址提取为整个单词

linux - 在标题后打印文件中的第二个字段。