这是我的示例文本文件:

asdas
//<<<TAG
this should be removed
//TAG>>>
this should be there
//<<<TAG
T
>
asd
asd
//TAG>>>

有关,我想O / P为:

asdas

this should be there

基本上I M努力寻找之间 “// << >>” 线(包括这些线也行),并将其删除。

我试图使用的sed

  

SED -n   '1H;!1H; $ {;克; S /// <<] * TAG >>> //克; P;}'   

但它做了一些如何不产生正确的输出。其中载有第二个标签“>”符号的正则表达式失败。不知道在哪里我要去了?

任何想法,该怎么办呢?

有帮助吗?

解决方案

如果你想删除与文字文本“标签”行,请尝试:

sed '/\/\/<<<TAG/,/\/\/TAG>>>/d'

从你的意见,似乎TAG可以不是字面,在这种情况下:

sed '/^\/\/<</,/^\/\/.*>>/d'

这可以通过使用不同的分隔符被简化:

sed '@^//<<<@,@^//.*>>>@d'

其他提示

而不是使用sed的解决方案,我给了,你可能会喜欢其中任一在Perl和awk:

perl -ne 'print if !( m@//<<<TAG@ .. m@//TAG>>>@ )'
awk '/\/\/<<<TAG/,/\/\/TAG>>>/ {next} 1'

既然我觉得你真的不想TAG是恒定的,我知道的干净的解决方案是Perl变种:

perl -ne 'print if !( m@^//<<<(.*)@ .. m@^//$1>>>$@ )'

在另外在sed搜索定界符可通过逸出第一分隔符来改变:

sed '\|^//<<<|,\|^//.*>>>|d' file

awk中版本的匹配具有相同标签名的末尾:

awk -F'//<<<|//|>>>' '$2{p=$2; while(getline && p!=$2); next}1' file
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top