提问人:Adam James Dietrick 提问时间:11/11/2023 更新时间:11/12/2023 访问量:72
删除两个字符串之间的任何回车符/换行符
Remove any returns/newlines between two strings
问:
我正在执行放映时间脚本的最后一步,该脚本提取了我当地的剧院信息并将其转换为干净的文本格式。我添加了一些“标志”,我想删除开头和结尾标志之间可能存在的任何返回,并且很可能将它们替换为空格。
电流输出:
|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|
答:
2赞
jhnc
11/11/2023
#1
如果总是后面跟着 ,那么这应该有效:|startStart|
|endEnd|
sed '
/|startStart|/ {
:a
/|endEnd|/! {
N
ba
}
s/\n/ /g
}
' inputfile >outputfile
- 当看到包含开始标记的行时:
- 直到看到包含结束标记的行
- 将下一行追加到模式空间
- 删除任何换行符
- 直到看到包含结束标记的行
0赞
potong
11/11/2023
#2
这可能对你有用(GNU sed):
sed ':a;/|endEnd|$/!{N;s/\n/ /;ba}' file
设置一个名为 的 goto 点。a
如果一行不以 结尾,则附加下一行并用空格替换它们之间的换行符。|endEnd|
转到a
注意如果没有下一行,该命令将终止处理,因此如果数据不完整,将输出错误记录。N
1赞
Walter A
11/12/2023
#3
当每行都应该有一个 时,将 all 替换为空格,并在每个 .|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
评论
awk
|endEnd|