找到了几个与我想要的相似的例子,但是他们不适合我,或者其他人根据评论来判断。
我想要这个
#Hello my name is Chris
next line of random txt
#Hello my name is Bob
next line of random txt
Hello Ana is my name #
next line of random txt
Another Line
是这个
#Hello my name is Chris
next line of random txt
Hello Ana is my name #
next line of random txt
Another Line
包含"#"的行但不是"克里斯"或者" Ana"被删除以及他们下面的行。
答案 0 :(得分:3)
给定输入:
sed -e '/#/ { /Chris/b' -e '/Ana/b' -e 'N; d; }' data
脚本:
sed -E \
-e '/#/ {
/(Chris|Ana)/b
N
d
}' \
data
或脚本:
#Hello my name is Chris
next line of random txt 1
Hello Ana is my name #
next line of random txt 3
Another Line
产生
sed
这似乎符合您的规格。第一个甚至不使用扩展正则表达式(ERE)语法,因此它最大程度上是可移植的,但第二个表明可以很容易地修改它以使用ERE语法。使用BSD b
,分支(-e
)命令后不能有分号;接下来的内容必须在另一行或另一个b
论证中。没有显式标签的Option Explicit
Sub Calculate(Total As Variant, X As Variant, Y As Variant, Z As Variant)
If Validity(Total, X, Y, Z)) Then ‘since Validity returns a boolean, you can simply check it
MsgBox "Yes, Proceed"
Else
MsgBox "No, abort"
End If
End Sub
Function Validity(Total As Variant, X As Variant, Y As Variant, Z As Variant) As Boolean
Validity = CInt(Total) < CInt(X*Y*Z)
End Function
表示“分支到脚本结束”。
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed '/Chris\|Ana/b;/#/!b;$!N;d' file
如果一行包含Chris
或Ana
中断,即。不进行进一步处理和正常打印。同样,如果一行不包含#
。如果当前行不是最后一行,则获取下一行并删除它们。否则,如果它是最后一行也将其删除。