shell 如何在SED中连接以-结尾但不以空格开头的行?

7dl7o3gd  于 2023-02-13  发布在  Shell
关注(0)|答案(4)|浏览(123)

我正在编写sed脚本,它将以-字符结尾的相邻文本行合并到下一行,如果它前面没有白色字符(空格、制表符)的话。
我有一个脚本,正是这样做,但它没有过滤正确。
我的剧本

#!/bin/bash
 file=$1
 sed ':a;/-$/{N;s/-\n//;ba}' $file

这是我的文件输入

line1- 
line2

line3-
line4

line5 -
 line6

这就是我想看到的结果

line1- 
line2

line3line4

line5 -
 line6

这就是我得到的

line1- 
line2

line3line4

line5 line6
juzqafwq

juzqafwq1#

sed命令应执行以下操作:

sed '
:a
/[^[:blank:]]-$/!b
$!N
s/-\n//
$!ba' file
0lvr5msh

0lvr5msh2#

您可以使用模式来捕获组中的非空白字符,并在替换中使用该组而不使用标签:

sed -E '/-$/{N;s/([^[:space:]])-\n/\1/}' $file

产出

line1- 
line2

line3line4

line5 -
 line6

查看sed演示。

6fe3ivhb

6fe3ivhb3#

使用GNU sed:

sed -rz 's/ -\n/ -\r/g; s/-\n//g; s/ -\r/ -\n/g' $file
yshpjwxd

yshpjwxd4#

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

sed -E ':a;N;s/(\S)-\n/\1/;ta;P;D' file

追加下一行,如果当前行以非空格字符结尾,后面跟一个-,则删除-和后面的换行符,然后重新执行。
否则,打印/删除第一行并重复。

相关问题