sed 用退格键替换

sed 用退格键替换

我有trail.txt,其中包含spice网表。现在我想将所有扩展参数仅替换为一行,即删除+该行并将其附加到上一行。

踪迹.txt

data
+ net06706 net06707
+ net221 net222 net223 
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u 
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u 

(所需)trail.txt

data net06706 net06707 net221 net222 net223 
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u 
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u 

命令

sed -e 's/^+/\b/g' trail.txt

我尝试替换,+backspace没有成功。有没有其他方法可以解决这个问题?还有其他替代方案吗?

答案1

我不认为你可以使用退格方法 - 但是你可以做类似的事情

sed -e :a -e '$!N;s/\n+/ /;ta' -e 'P;D' trail.txt

著名的 Sed 行话解释,第一部分:文件间距、编号以及文本转换和替换,40. 如果前一行以等号“=”开头,则在前一行后面追加一行(明显替换为+=

答案2

FWIW、GNUawk

awk -vRS='\\n\\+?' '{ORS=RT == "\n+"? "":RT; print}' trail.txt
data net06706 net06707 net221 net222 net223
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u

答案3

几个想法,因为使用 sed 会有点棘手:

perl -00 -pe 's/\n\+\s*/ /g' file
awk '
    {
        if (/^\+/) 
            sub(/^\+[[:blank:]]*/, " ", $0)
        else 
            if (NR > 1) print ""
        printf "%s", $0
    } 
    END {print ""}
' file 

答案4

GNU sed允许不用于perl这样简单的任务:

sed -z 's/\n+//g' trail.txt

相关内容