linux - SED - 删除后跟换行 (\n) 的字符串

标签 linux unix sed awk vi

我找不到合适的 sed 表达式来删除后跟行返回 (\n) 的单词

测试文件是:

line1\n
line2\n
line3mark\n
line4\n
line5\n

我想删除所有出现的标记\n离开,在这种情况下:

line1\n
line2\n
line3line4\n
line5\n

已搜索并可以使用:

sed 's/\n//g' test.file  to remove ALL \n's

但是

sed 's/mark\n//g' test.file does not work

奇怪的是,s/mark\n//g 在 vi​​ 的交互模式下似乎工作正常。

非常感谢任何帮助! 如果可能的话,我想了解如何使用 SED 来做到这一点,因为我相信这是可能的!! 但是,如果它可以通过其他方式完成,那么只要它在命令行上,我也很高兴,因为它必须运行许多文件。

非常感谢。

最佳答案

这应该可以解决问题:

sed -i ':a;N;$!ba;s/mark\n//g' file

解释:

;    command separator within sed
:a   a label, like in C/C++
N    appends the next line to the pattern space
$!ba repeats the N command for all lines but the last line

sed 是这样进行的。它将标准输入读入模式空间,在模式空间上执行一系列编辑命令,然后将模式空间写入 STDOUT。

当你做类似的事情时

sed -i 's/mark\n//' file

一行一行地复制到模式空间。

:a;N;$!ba 将每一行附加到模式空间。

然后模式空间可以一次处理,删除任何 mark\ng 选项,对于全局,在这里很重要,因为它要求 sed 不要在第一个匹配模式处停止。

关于linux - SED - 删除后跟换行 (\n) 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8141826/

相关文章:

c - 通过/dev/mem读写进程内存,text段可以,data段不行,为什么?

linux - 如何阅读有关内置 zsh 命令的文档?

PHP Text Stream/Buffer 在脚本之间共享实时数据

windows - 配置 Node npm package.json 以便 "npm test"在 unix 和 windows 上都可以工作

linux - 如何使用 sed 在命令行中提取单个值?

c++ - OpenCL 视频处理

mysql - 升级 Bugzilla 获取错误表已存在

file - 检查目录中是否存在多个文件

regex - 合并两个 sed 命令

linux - SED & AWK 在一行中打印文件中的条目