algorithm - control+M 字符和 '\r' 字符有什么区别。我们怎么写呢?

标签 algorithm unix awk ksh gawk

'control+M' 字符和'\r' 字符有什么区别。

两者不一样。我们如何在 gawk 中像写 '\r' 一样写 control+M 字符。

我的目的是告诉 gawk,将 'comtrol+M' 字符作为 RS(记录分隔符)。

对于'\r'我们可以写成

gawk -v RS='\r' 'code goes here' file

gawk -v RS='\r' -v ORS='\n' '{gsub(/\n/,"",$0)} {print $0}' rawfile > newfile_slashr_removed

这里不是 '\r' 我想用 'comtrol+M'

背景:

$ grep '\r' raw_file | wc
   1468   44570 2641642

$ grep '^M' raw_file | wc
   1463   44522 2638958

在我使用上面的代码并获取输出并将其放入文件后,

$ grep  '^M' WDY_worker_incr_newfile | wc
      0       0       0
$ grep '\r' WDY_worker_incr_newfile | wc
   1464   44570 2640175

这是怎么回事?

最佳答案

你不写 ^M,你按 Ctrl-V 然后 然后 Ctrl-M 组合键。最初的 Ctrl-V 使 shell 命令行编辑“转义”成为下一个键 — 通常,Ctrl-M 将映射到与您的 shell 中的 Return 相同的操作,但是有了这个,您可以在命令上键入文字回车行。

有了这个,您就可以通过键入 RS=' + < kbd>Ctrl-V + Ctrl-M + '

在现代 shell(mksh、AT&T ksh93、GNU bash 等)上,您还可以编写 RS=$'\r'grep $'\r' 相反,美元撇号引号内插 C 风格的转义序列。

大多数工具不允许只允许您编写'\r'; printf 和 tr 是异常(exception),可能有也可能没有其他的,这取决于所使用的操作系统和工具(例如,GNU sed 允许它们出现在比 BSD sed 更多的地方)。

您将其标记为 unix,但是,作为另一点注意事项,在基于 DOS 的环境(如 Cygwin32)上,^M^J 是行分隔符,而不是只是 ^J 就像在适当的 Unix 上一样,所以如果您想重新使用回车符,工具可能会出现错误。

关于algorithm - control+M 字符和 '\r' 字符有什么区别。我们怎么写呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40082707/

相关文章:

regex - 如何过滤 Bash 正则表达式(Linux)中除一个之外的所有值?

java - Java中的 vector 空间模型算法来获得两个人之间的相似度分数

Javascript:找出不按顺序的日期

c++ - tell() 函数在哪里定义的?

c - 为什么父 pid 返回的值与 getpid() 不同?

linux - 如何从管道中使用两次 STDIN

c++ - 快速插入和快速搜索的正确数据结构?

c++ - 是否有一种有效的标准算法来栅格包括其内部区域的多边形

c++ - 多线程客户端服务器

linux - AWK 脚本不打印 CSV 文件的最后一列