我找不到合适的 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\n
, g
选项,对于全局,在这里很重要,因为它要求 sed 不要在第一个匹配模式处停止。
关于linux - SED - 删除后跟换行 (\n) 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8141826/