我有一个这样的文件:
1
22
1
4
$3
3
5556
$33
$233
$1
5
我想$
通过用空格替换换行符来将所有以 开头的行移动到上一行。我的结果应该类似于:
1
22
1
4 $3
3
5556 $33 $233 $1
5
我该如何使用sed
orgrep
或 来做到这一点awk
?
答案1
这里发布了类似的问题:SED命令格式化文本文件
正如 Stéphane 的评论所建议的,您的问题的解决方案sed
如下:
sed -e :a -e '$!N;s/\n\$/ $/;ta' -e 'P;D' filename
答案2
这非常简单,你必须:
- 将文本转换为十六进制
- 将 0a24(换行和 $)替换为 2024(空格和 $)
- 将其转换回文本
在此单行代码中,该文件称为“文件”:
# 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
模式。