如何在使用sed的模式之前删除换行符/换行符

时间:2012-08-26 11:49:12

标签: sed awk

标题已经说明了:

我想使用一些linux one liner(例如sed)

转换

Anytext
{

Anytext{

这可以使用sed完成,或者如果没有使用sed然后使用awk one liner吗?

5 个答案:

答案 0 :(得分:3)

当然,

sed 'N;s/\n{/{/'

或更全面的版本:

sed ':r;$!{N;br};s/\n{/{/g'

在这里,:r设置了一个我们可以参考的标签,以便创建一个循环;

$!{...}为除最后一行之外的每一行执行给定的命令集;

N;br是循环中执行get的两个命令:N向模式空间添加一个新行,br分支回标签r,完成循环。

然后,当您运行最终命令时,您将所有文件都放在模式空间中:

s/\n{/{/g

如果您尝试使用

之类的方法,可以看到两种方法之间的区别
Anytext
{
{
{

答案 1 :(得分:1)

使用sed的一种方式:

sed -ne '$! N; /^.*\n{/ { s/\n//; p; b }; $ { p; q }; P; D' infile

测试。假设infile包含内容:

one
Anytext
{
two
three
{
four
five
{

输出将是:

one
Anytext{
two
three{
four
five{

答案 2 :(得分:1)

如果打算从\n{序列移除换行符bbe似乎是最简单的工具:

bbe -e 's/\n{/{/' infile

答案 3 :(得分:1)

这可能适合你(GNU sed):

sed ':a;$!{N;/.*\n{/ba};s/\n{/{/g;P;D' file

答案 4 :(得分:1)

使用awk

cat file
one
Anytext
{
two
three
{
four
five
{

awk '{printf (!/^{/&&NR>1?RS:x)"%s",$0} END {print ""}' file
one
Anytext{
two
three{
four
five{