我正在尝试删除文件中所有行的结束线,其中结束线分割两个等号
即:
1
a=
=b
2
到
1
a==b
2
我有
sed -i.bak -e 's/=\n =//g' fileName
但是,它似乎没有对我的文件进行任何更改。我的剧本是否正确?
答案 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