我正在尝试检查给定的所有模式是否都存在于文件中。如果是,则显示成功。
例如:我有一个如下文件
$ cat test.txt
ABC
123
xyz
ABC
MNO
qwe
$
我要搜索的模式是ABC和123。因此,在上述情况下,它应该显示成功。
如果我的模式是ABC和234,它应该显示FAILURE。
我试过如下:
$ grep -e ABC -e 123 test.txt && echo "SUCCESS" || echo "FAIL"
ABC
123
ABC
SUCCESS
$
$ grep -e ABC -e 234 test.txt && echo "SUCCESS" || echo "FAIL"
ABC
ABC
SUCCESS
$
但即使一种模式也失败,上述情况也会成功。
也尝试如下。但它在文件中需要2次迭代。
$ grep -w "ABC" test.txt && grep -w "123" test.txt && echo "SUCCESS" || echo "FAIL"
ABC
ABC
123
SUCCESS
$ grep -w "ABC" test.txt && grep -w "234" test.txt && echo "SUCCESS" || echo "FAIL"
ABC
ABC
FAIL
$
在单个文件解析中实现此目的的任何帮助吗?
答案 0 :(得分:2)
您可以使用awk
命令执行此操作:
awk -v patt='ABC,123' 'BEGIN {
n = split(patt, words, /,/)
}
n {
for (i in words)
if ($0 ~ "\\<" words[i] "\\>") {
--n
delete words[i]
}
}
END {
exit n
}' test.txt && echo "SUCCESS" || echo "FAIL"
<强>解释强>
patt
BEGIN
块中,我们通过拆分输入字段并存储字数来搜索变量words
n
n > 0
我们对一行中的每个数组元素执行单词搜索时,如果找到搜索到的单词,我们会从数组中删除该单词并递减n
END
块中,如果退出时带有值n
,则在找到所有单词后返回0
(或成功)。答案 1 :(得分:-1)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
badgeLayout = (RelativeLayout) menu.findItem(R.id.badge).getActionView(); /*-------Cart Basket with Counter---------*/
basketCount = (TextView) badgeLayout.findViewById(R.id.counter);
CommonUtil.dbUtil.open();
try {
MainActivity.basketCount.setText(String.valueOf(CommonUtil.dbUtil.getCartItem().getCount()));
} catch (Exception e) {
MainActivity.basketCount.setText(String.valueOf("0"));
}
badgeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "Cart Clicked", Toast.LENGTH_SHORT).show();
/*
* menuItemClicked represents ToolBar OverFlow (...) menu is clicked.
* */
Config.menuItemClicked = true;
SharedPreferences.Editor editor = CommonUtil.pref.edit();
editor.putBoolean("cart_Clicked", Config.menuItemClicked);
editor.apply();
Intent next = new Intent(context, ProductActivity.class);
startActivity(next);
}
});
invalidateOptionsMenu();
return super.onCreateOptionsMenu(menu);
}