如何删除“/ test1 1/end”后面不包含test1的行
test_long_stanence.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
**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输出:
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
...我试过:
grep -A1 'end' test_long_sentence.txt| sed 'test1/!d' test_long_sentence.txt > output.txt发布于 2018-02-12 08:35:03
尝试:
$ 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的线条之前,我们不应该打印后面的线条。awk -v a="test1" -v b="test1/end" '$0~a{f=0} !f{print} $0~b{f=1}' sentence.txthttps://unix.stackexchange.com/questions/423541
复制相似问题