shell/bash 判断一个句子是否同时存在两个字符串,怎么写。

例如:文件里有一个句子 DIM location: Mem 1 CHANNEL A
我想用一则命令 判断 当同时满足有 “DIM” && “Mem” && “CHANNEL” 关键字的时候 才打印这个句子。

如果对出现顺序有要求,可以这样:

awk '/DIM.*Mem.*CHANNEL/' file.txt

如果出现顺序可能随机,那么这样:

awk '/DIM/ && /Mem/ && /CHANNEL/' file.txt

追问

您好, 我想追问一句, 我给出的那一个句子,是期望看到的输出信息, 而在脚本最初 我想以 变量 的形式定义, 在最后的输出信息中 判别是否 达到期望结果, 所以 假如 我在脚本最开头定义:
MESSAGE="DIM.*Mem.*CHANNEL"
...
...
dmesg | awk '/$MESSAGE/'

这样可以么? 有更美观的方法吗?
谢谢。

追答MESSAGE="DIM.*Mem.*CHANNEL"
dmesg | awk '/'"$MESSAGE"'/'

这个MESSAGE其实是正则表达式,包含了一些匹配字符。

如果要纯粹字符串,这样:

MESSAGE1="DIM"
MESSAGE2="Mem"
MESSAGE3="CHANNEL"
dmesg | sed -n "/$MESSAGE1.*$MESSAGE2.*$MESSAGE3/p" #规定了先后顺序

或者:

dmesg | awk "/$MESSAGE1/ && /$MESSAGE2/ && /$MESSAGE3/" #无先后顺序要求

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-26
grep “DIM” |grep “Mem” | grep “CHANNEL”
输出不为空,即是符合你的条件

shell\/bash 判断一个句子是否同时存在两个字符串,怎么写。
awk '\/DIM.*Mem.*CHANNEL\/' file.txt如果出现顺序可能随机,那么这样:awk '\/DIM\/ && \/Mem\/ && \/CHANNEL\/' file.txt

Shell判断是否包含给定字符串
首先,我们可以利用 grep 命令。例如,假设我们有一串文本内容,要检查其中是否包含特定子字符串,只需将文本内容和待搜索的子字符串输入到 grep 命令中。如果输出结果非空,说明子字符串在文本中存在。另一种方法是直接使用字符串运算符。通过在字符串前加上运算符 =~,即可判断该字符串是否包含指定的...

shell 查看一个文件text.txt里是否包含多个字符串比如A1和A2,如果是...
1)awk是按记录(默认为一行文件内容)处理文本的,现在将awk的记录分隔符RS清空(默认是换行符),这样整个文件就会被认为是一条记录。2)判断该条记录(即整个文件内容)是否匹配A1~A7,都匹配,则打印yes,否则打印no。不过不知道awk的buffer里能放多少内容,如果文件较大会不会有问题,这种情况有待...

shell\/bash 两个变量的提取和判断,即:实现两个条件同时存在
awk -v RS="" '\/1234\/&&!\/qwer\/' file.txt你的这个例子,由于出现了qwer,所以输出为空。RS(记录分隔符)默认为换行符,但这里将所有文件内容作为一条记录来整体看待,以便判断是否含有要求的内容,所以清除了记录分隔符。

Shell 脚本中的 if 条件判断
条件判断格式Shell提供了两种判断格式,一种是基础的if...else...,另一种则是简化的版本。判断语句的真假在Bash中通过变量类型和特殊变量$?来确定,0表示成功,非0表示失败。if语句示例单分支:用于执行单一操作,如检查文件是否存在双分支:通过逻辑运算符(如&&或||)结合两个条件多分支:使用嵌套if...

linuxshell如何判断一个文件是否存在
答案:在Linux Shell中,可以使用条件语句结合文件测试操作符来判断一个文件是否存在。常用的命令结构为:`if [ -f "文件名" ]; then ... fi`。其中`-f`表示测试文件是否存在。详细解释:1. 文件测试操作符: 在Linux Shell脚本中,可以使用特定的文件测试操作符来检查文件的属性。对于检查文件是否...

linux shell怎么查找文件中指定字符串,并把该字符串和下一行的内容写...
shell使用引号(单引号\/双引号)和反斜线("\\")用于向shell解释器屏蔽一些特殊字符,反引号(")对shell则有特殊意义。如:abc="how are you" (bash\/pdksh)set abc = "how are you" (tcsh)这个命令行把三个单词组成的字符串how are you作为一个整体赋值给变量abc.abc1='@LOGNAME,how are you...

请教大神shell的for in语句中怎么使用多个变量
done 2、遍历字符串列表、用空格分隔:!\/bin\/bash for server in a b c do echo$server done 3、遍历参数列表:!\/bin\/bash for arg in do echo$arg done4、遍历文件目录:!\/bin\/bash for i in ~\/*.sh do echo$i cat$i done 注:$i是整个目录和文件,for in语句也可以与` `和$( ...

【Shell编程】| if 判断的五个关键点
字符串判断同样重要,例如判断字符串是否为空、两个字符串的比较等。这里建议使用双中括号进行操作,以避免潜在的错误。最后,test指令提供了另一种条件测试方法,它简洁明了,有助于提升代码可读性。然而,值得注意的是,test是一个外部程序,执行效率不如Bash的内置函数[,尤其是对于兼容性要求较高的...

shell中如何判定一个字符串里是否有空格?
!\/bin\/bash S='1000 1011'echo $S | grep " " >\/dev\/null 2>&1 if [ $? = 0 ];then num1=$(echo $S | awk '{print $1}')num2=$(echo $S | awk '{print $2}')echo "NUM1=$num1"echo "NUM2=$num2"else echo "没有空格"fi ...

相似回答