linux 删除两个字符串之间的任何回车/换行符

qv7cva1a  于 12个月前  发布在  Linux
关注(0)|答案(3)|浏览(175)

我在我的showtimes脚本的最后一步,拉我的本地theatres信息,并将其转换为一个干净的文本格式。我已经添加了一些“标志”,我想删除任何可能存在于开始和结束标志之间的返回,最有可能用空格替换它们。
电流输出:

|startStart| Sat Nov 11, 1:00 4:10 |endEnd|
|startStart| Sun Nov 12, 1:00 4:10 |endEnd|
|startStart| Mon Nov 13, 5:50 |endEnd|
|startStart| Tue Nov 14, 5:50 |endEnd|
|startStart| Wed
Nov 15, 5:50 |endEnd|

字符串
我不知道如何进行.我不能找到一个类似的问题使用谷歌.我想使用SED如果可能的话,因为这是什么是在脚本的其余部分使用,这是我目前正在学习的程序.
我希望输出看起来像这样:

|startStart| Sat Nov 11, 1:00 4:10 |endEnd|
|startStart| Sun Nov 12, 1:00 4:10 |endEnd|
|startStart| Mon Nov 13, 5:50 |endEnd|
|startStart| Tue Nov 14, 5:50 |endEnd|
|startStart| Wed Nov 15, 5:50 |endEnd|

sulc1iza

sulc1iza1#

如果|startStart|后面总是跟着|endEnd|,那么这应该是可行的:

sed '
    /|startStart|/ {
        :a
        /|endEnd|/! {
            N
            ba
        }
        s/\n/ /g
    }
' inputfile >outputfile

字符串

  • 当看到包含开始标记的行时:
  • 直到看到包含结束标记的行
  • 追加下一行到模式空间
  • 删除任何新行
tcomlyy6

tcomlyy62#

当每行都应该有一个|startStart|...|endEnd|时,用一个空格替换所有的\n,并在每个|endEnd|后面追加一个新行。

tr '\n' ' ' < file | sed -r 's/\|endEnd\| /&\n/g'

字符串
或使用-z选项

sed -rz 's/\n/ /g;s/\|endEnd\| /&\n/g' file


编辑:
在上面的修改之后,每行将以空格结束。不要使用&

sed -rz 's/\n/ /g;s/(\|endEnd\|) /\1\n/g' file

kjthegm6

kjthegm63#

这可能对你有用(GNU sed):

sed ':a;/|endEnd|$/!{N;s/\n/ /;ba}' file

字符串
设置一个名为a的后藤点。
如果一行不是以|endEnd|结尾,则追加下一行,并将它们之间的换行符替换为空格。
转到a
注意:如果没有下一行,N命令将终止处理,因此如果数据不完整,将输出错误的记录。

相关问题