0

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

IE:

1
a=
=b
2

1
a==b
2

我有

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

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

4

3 回答 3

2

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

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

它产生:

1
a==b
2
于 2012-12-17T20:04:14.293 回答
2

这可能对您有用(GNU sed):

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

或者

sed -e '$!N' -e 's/='$"\n"'=/==/' -e 'P' -e 'D' file
于 2012-12-17T20:47:23.773 回答
1

不同操作系统上的不同 sed 以不同的方式处理换行符。在 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
于 2012-12-19T13:50:28.980 回答