如何使用sed删除选定的最终行?

时间:2012-12-17 19:48:59

标签: sed

我正在尝试删除文件中所有行的结束线,其中结束线分割两个等号

即:

1
a=
=b
2

1
a==b
2

我有

sed -i.bak -e 's/=\n    =//g' fileName

但是,它似乎没有对我的文件进行任何更改。我的剧本是否正确?

3 个答案:

答案 0 :(得分:2)

试试这个。它将整个文件内容保存在模式空间中,并删除等号之间的所有换行符。

sed -i.bak -e ':a ; $! { N; b a }; s/=\n=/==/g' fileName

它产生:

1
a==b
2

答案 1 :(得分:2)

这可能适合你(GNU sed):

sed '$!N;s/=\n=/==/;P;D' file

sed -e '$!N' -e 's/='$"\n"'=/==/' -e 'P' -e 'D' file

答案 2 :(得分:1)

不同操作系统上的不同seds以不同方式处理换行。在sed中指定换行符的最便携方式是在返回之前使用反斜杠:

sed -e 's/=\
=//g' file

但是,在你调用其他一些魔法sed字符将多行插入缓冲区等之前,这对你不起作用....

只需使用awk:

$ cat file
1
a=
=b
2
$ awk '{printf "%s%s", $0, (/=$/ ? "" : "\n")}' file
1
a==b
2

如果当前行以“=”结束,则打印当前行,否则不显示任何内容。不可能更简单,而且非常便携......

哦,如果您想更改原始文件,那就是:

awk '{printf "%s%s", $0, (/=$/ ? "" : "\n")}' file > tmp && mv tmp file