如何生成与模式不匹配的字符串元素?

San*_*ing 2 linux bash awk grep

如果我有

days="1 2 3 4 5 6"

func() {
    echo "lSecure1"
    echo "lSecure"
    echo "lSecure4"
    echo "lSecure6"
    echo "something else"
}
Run Code Online (Sandbox Code Playgroud)

并做

func | egrep "lSecure[1-6]"
Run Code Online (Sandbox Code Playgroud)

然后我明白了

lSecure1
lSecure4
lSecure6
Run Code Online (Sandbox Code Playgroud)

但我想要的是

lSecure2
lSecure3
lSecure5
Run Code Online (Sandbox Code Playgroud)

这是没有lSecure字符串的所有日子.

我目前的想法是使用awk拆分$days然后循环所有组合.

有没有更好的办法?

请注意,grep -v会反转普通grep的意义,并且不会解决问题,因为它不会生成所需的字符串.

cho*_*oba 5

我通常使用-fgrep 的标志用于类似的目的.该<( ... )代码生成与所有可能性的文件,grep的仅选择那些在FUNC不存在.

func | grep 'lSecure[1-6]' | grep -v -f- <( for i in $days ; do echo lSecure$i ; done )
Run Code Online (Sandbox Code Playgroud)

或者,你可能更喜欢它反过来:

for i in $days ; do echo lSecure$i ; done | grep -vf <( func | grep 'lSecure[1-6]' )
Run Code Online (Sandbox Code Playgroud)