繁体   English   中英

sed 脚本在 if 空行之前删除行

[英]sed script delete line before if blank line

我有一个看起来像这样的文件:

name:height:weight

janice:120:209
mark:150:349
ray:90:204
elle:140:129

----------

我想编写一个 sed 脚本,在文件的开头+结尾以及每个人输入之前和之后添加一行包含~的行,如下所示:

~
name:height:weight

~
janice:120:209
~
mark:150:349
~
ray:90:204
~
elle:140:129
~

----------
~

我当前的脚本和 output 看起来像这样,但我不知道如何在每个人条目之间添加“~”:

1i ~
$a ~
~
name:height:weight

janice:120:209
mark:150:349
ray:90:204
elle:140:129

----------
~

这与您的 output 不完全匹配,但它确实符合我在评论中描述的内容,并且您确认这就是您想要的:

awk '/./ && !/^---/{print "~"}1; END{print "~"}' input

根据您的实际要求进行调整。

可能是所有这些中最短的答案:

Sed 脚本:

i ~
/^name:height:weight$\|^$/N
$a ~

解释:

  • 第 1 行:在每行之前插入~
  • 第2行:如果我们点击header或之前的空行--------我们跳过下一个~
  • 第3行:append ~到stream结尾

让我们保存它script.sed ,然后测试一下:

> sed -f script.sed test.txt
~
name:height:weight

~
janice:120:209
~
mark:150:349
~
ray:90:204
~
elle:140:129
~

----------
~

经测试

> sed --version
sed (GNU sed) 4.2.2
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Jay Fenlason, Tom Lord, Ken Pizzini,
and Paolo Bonzini.
GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-sed@gnu.org>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.

这将在每个 UNIX 盒子上的任何 shell 中使用任何 awk 工作:

$ cat tst.awk
BEGIN { RS="" }
NR == 1 { print "~\n" $0 "\n"; next }
/^-+$/  { print $0 "\n~"; next }
{
    gsub(/\n/,"\n~\n")
    print "~\n" $0 "\n~\n"
}

.

$ awk -f tst.awk file
~
name:height:weight

~
janice:120:209
~
mark:150:349
~
ray:90:204
~
elle:140:129
~

----------
~

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

sed -zE 's/.*/~\n&/mg;s/~\n//2;s/(.*)~\n(.*~)/\1\2/' file

~\n放在所有非空行的上方和下方,然后从~\n的最后一次出现中删除第二个和第二个。

选择:

sed -e '1i~' -e '1b;N;/^\n$/!a~' -e 'P;D' file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM