如何从特定模式之前的行中删除换行符?

如何从特定模式之前的行中删除换行符?

我有一个这样的文件:

1
22
1
4
$3
3
5556
$33
$233
$1
5

我想$通过用空格替换换行符来将所有以 开头的行移动到上一行。我的结果应该类似于:

1
22
1
4 $3
3
5556 $33 $233 $1
5

我该如何使用sedorgrep或 来做到这一点awk

答案1

这里发布了类似的问题:SED命令格式化文本文件

正如 Stéphane 的评论所建议的,您的问题的解决方案sed如下:

sed -e :a -e '$!N;s/\n\$/ $/;ta' -e 'P;D' filename

答案2

这非常简单,你必须:

  1. 将文本转换为十六进制
  2. 将 0a24(换行和 $)替换为 2024(空格和 $)
  3. 将其转换回文本

在此单行代码中,该文件称为“文件”:

# xxd -ps file|tr -d "\n"|sed s/0a24/2024/g|xxd -r -ps
1
22
1
4 $3
3
5556 $33 $233 $1
5

答案3

$ vi file
:g/^\$/-1j
:x

:join即在美元符号行之前的行上执行一行操作,然后保存并退出。

答案4

尝试这个:

awk 'BEGIN {ORS = " "} {print}' file | sed 's/\( \)\([0-9]\)/\n\2/g'

awk通过将输出字段分隔符设置为空格,将列更改为行,同时sed查找space+number模式并将其替换为newline+number模式。

相关内容