【问题标题】:Delete line char using sed when not matching a pattern不匹配模式时使用 sed 删除行字符
【发布时间】:2020-07-14 21:34:40
【问题描述】:

在我的 grep 之后,我生成了一个文件,其中包含数据作为键和计数,但在单独的行中:

$Value, "Some", $233kS
:2343
$AnotherCount, JunkValue
:38585
YetAnother, Nothing
:38484

我想要一个类似的文件:

$Value, "Some", $233kS:2343
$AnotherCount, JunkValue:38585
YetAnother, Nothing:38484

计数模式是固定的,它的格式总是:[0-9]* 是否可以使用sed 或任何单行命令?

我查看了replace line,但仅在计数模式不匹配时才想要。

我对可以解决扩展问题的解决方案感兴趣:

$Value, "Some", $233kS
$AnotherCount, JunkValue
:38585
YetAnother, Nothing
:38484

应该输出:

$Value, "Some", $233kS$AnotherCount, JunkValue:38585
YetAnother, Nothing:38484

基本上,所有不匹配模式的行都不应该有结束行字符。

【问题讨论】:

标签: sed grep


【解决方案1】:

其中任何一个都可能对您有所帮助:

$ awk '!(FNR%2){ print b $0 }{b=$0}' file
$ paste -sd "\0\n" file

这两行都假设奇数行需要与偶数行连接

注意:根据POSIX paste "\0" 被认为是一个空字符串,而不是 -字符

【讨论】:

  • 这两种方法都适用于我原来的问题。你能看看扩展的问题吗?
  • @impossible 那是awk '{ORS = /^:[0-9]/ ? "\n" : ""} 1' 我确定某处有重复...