首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果keyword1不存在keyword2,则删除keyword2后的行

如果keyword1不存在keyword2,则删除keyword2后的行
EN

Unix & Linux用户
提问于 2018-02-12 08:12:56
回答 1查看 63关注 0票数 0

如何删除“/ test1 1/end”后面不包含test1的行

test_long_stanence.txt:

代码语言:javascript
复制
20  /test1/catergory="Food"
20  /test1/target="Adults, \"Goblins\", Elderly,
Babies, \"Witch\",
Faries"
20  /test1/type="Western"
20  /test1/theme="Halloween"
20  /test1/end=category
**This is some unwanted data blah blah blah**
20  /test1/Purpose=
20  /test1/my_purpose="To create 
a fun-filled moment"
20  /test1/end=Purpose
...

Expected输出:

代码语言:javascript
复制
20  /test1/catergory="Food"
20  /test1/target="Adults, \"Goblins\", Elderly,
Babies, \"Witch\",
Faries"
20  /test1/type="Western"
20  /test1/theme="Halloween"
20  /test1/end=category
20  /test1/Purpose=
20  /test1/my_purpose="To create 
a fun-filled moment"
20  /test1/end=Purpose
...

我试过:

代码语言:javascript
复制
grep -A1 'end' test_long_sentence.txt| sed 'test1/!d' test_long_sentence.txt > output.txt
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-02-12 08:35:03

尝试:

代码语言:javascript
复制
$ awk '/test1/{f=0} !f{print}  /test1\/end/{f=1}' sentence.txt  
20  /test1/catergory="Food"
20  /test1/target="Adults, \"Goblins\", Elderly,
Babies, \"Witch\",
Faries"
20  /test1/type="Western"
20  /test1/theme="Halloween"
20  /test1/end=category
20  /test1/Purpose=
20  /test1/my_purpose="To create 
a fun-filled moment"
20  /test1/end=Purpose

是如何工作的

当awk启动时,默认情况下,任何未定义的变量都是false。所以,当awk启动时,f将是假的。然后,Awk将依次读取每一行,并执行以下三个命令:

  • 对于任何包含/test1/{f=0}的行,我们将变量f设置为false (0)。当我们在要打印的一系列行中时,f将被设置为false。
  • !f{print}如果f为false,则打印当前行。
  • 对于包含/test1\/end/{f=1}的任何行,将f设置为true (1)。这表明,在到达包含test1的线条之前,我们不应该打印后面的线条。

使用变量

代码语言:javascript
复制
awk -v a="test1" -v b="test1/end"  '$0~a{f=0} !f{print}  $0~b{f=1}' sentence.txt
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/423541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档