如何在bash\n\n
中用空\0
字符替换两个换行符,反之亦然?
我看到td
可以用空替换单个换行符,但不能用两个连续的换行符替换。我试过了sed
,但似乎不可能。sed
似乎“基于行”并且不喜欢弄乱换行符。
我想要这样做的原因是能够使用sort -z
. 例如,给定一个文件
record b
foo bar
record a
zee bee
dee da
我想将该文件传输到一个转换中,该转换将空行替换为空,然后转换为sort -z
,然后将空替换为空行,最后将其吐出
record a
zee bee
dee da
record b
foo bar
标题询问您尝试的解决方案;您在问题正文中描述了真正的问题。比较XY 问题。这个答案并不完全是“用空替换空行,反之亦然”,所以它没有解决标题。它在正确的位置注入空字节,然后删除它们(因为我认为它更容易),这样它就解决了主体。
让我们调整我的另一个答案:按字母顺序排列行包。你的问题几乎是我回答的问题的重复。
在那里,每条记录都以像[ProfileX]
. 在你的情况下,我们可以说一个空行就是这样的标题,但第一条记录错过了它。要使用链接的解决方案,我们需要预先添加第一个标题,并在最后删除第一个标题。
sed -e '1 s/^/\n/' -e '1 ! s/^$/\x00/' | sort -z | tr -d '\0' | sed -e '1 d'
# ^^^^^^^^^^^^^^ add missing header
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ apply the other answer (adjusted)
# ^^^^^^^^^^^^ remove excessive header
如果没有这个修改,输入的第一条记录就会出现在输出中,前面没有任何空行;这将是一个问题,除非它是输出中的第一条记录。并且输出中的第一条记录将在其前面有其标题(如果有);这将是一个问题,除非它是输入的第一条记录(没有标题的记录)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句