如何使用sed删除选定的端点?

如何使用sed删除选定的端点?,sed,Sed,我正在尝试删除文件中所有行的结束行,其中结束行拆分两个等号 即: 到 我有 sed -i.bak -e 's/=\n =//g' fileName 但是,它似乎没有对我的文件进行任何更改。我的脚本正确吗?试试这个。它将整个文件内容保存在模式空间中,并删除等号之间的所有换行符 sed -i.bak -e ':a ; $! { N; b a }; s/=\n=/==/g' fileName 它产生: 1 a==b 2 试试这个。它将整个文件内容保存在模式空间中,并删除等号之间的所有换行符

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

即:

我有

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

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

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

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

1
a==b
2

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

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

1
a==b
2
这可能适用于您(GNU-sed):

这可能适用于您(GNU-sed):


不同操作系统上的不同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

不同操作系统上的不同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

@蓝莓场:我的信息:
GNU-sed版本4.2.1
Linux。有错误吗?在mac os x 10.7.5上使用,不要认为它有版本号。无错误:(@blueberryfields:抱歉。我无能为力。正如我所知,
OS X
中对换行符的处理似乎有所不同。我不知道这是否与此答案有关。@blueberryfields:我的信息:
GNU sed版本4.2.1
在Linux中。任何错误?在mac OS X 10.7.5上使用,不要认为它有版本号。无错误:(@blueberryfields:对不起,我帮不上忙。据我所知,
OSX
中对换行符的处理似乎有所不同。我不知道这是否与这个答案有关。