我正在尝试删除文件中所有行的结束线,其中结束线将两个等号分开
IE:
1
a=
=b
2
至
1
a==b
2
我有
sed -i.bak -e 's/=\n =//g' fileName
但是,它似乎没有对我的文件进行任何更改。我的脚本正确吗?
我正在尝试删除文件中所有行的结束线,其中结束线将两个等号分开
IE:
1
a=
=b
2
至
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
这可能对您有用(GNU sed):
sed '$!N;s/=\n=/==/;P;D' file
或者
sed -e '$!N' -e 's/='$"\n"'=/==/' -e 'P' -e 'D' 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