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的意义,并且不会解决问题,因为它不会生成所需的字符串.
我通常使用-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)