'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/