簡體   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