Bash 在每一行中查找特定单词并显示会导致unix shell脚本编写
我想检查像Bash 在每一行中查找特定单词并显示会导致unix shell脚本编写,bash,shell,unix,Bash,Shell,Unix,我想检查像raj或rohit(忽略大小写)这样的单词是否作为独立单词出现在文件的每一行中。如果找到匹配项,则传递“找到” 如果没有,则在另一个文件中“找不到”。所以每行都必须有条目 范例 输入文件说明(Input.txt) 输出文件(例如file.out) #!awk-f { 打印/\/?“已找到”:“未找到” } #!awk-f { 打印/\/?“已找到”:“未找到” } 使用awk: awk -v s1='(^| )raj( |$)' -v s2='(^| )rohit( |$)' '{
raj
或rohit
(忽略大小写)这样的单词是否作为独立单词出现在文件的每一行中。如果找到匹配项,则传递“找到”
如果没有,则在另一个文件中“找不到”。所以每行都必须有条目
范例
输入文件说明(Input.txt
)
输出文件(例如file.out
)
#!awk-f
{
打印/\/?“已找到”:“未找到”
}
#!awk-f
{
打印/\/?“已找到”:“未找到”
}
使用awk:
awk -v s1='(^| )raj( |$)' -v s2='(^| )rohit( |$)' '{
print ($0~s1 || $0~s2)? "found": "not found"}' file
found
found
found
not found
found
not found
使用awk:
awk -v s1='(^| )raj( |$)' -v s2='(^| )rohit( |$)' '{
print ($0~s1 || $0~s2)? "found": "not found"}' file
found
found
found
not found
found
not found
使用支持
\y
(和\
)的GNU awk
)匹配单词边界:
使用支持
\y
(和\
)的GNU awk
)匹配单词边界:
+1用于GNU awk的
info;您指的是哪种nawk
?在一些平台上,例如Ubuntu 12.04,nawk
仅仅是gawk
的符号链接。至于为什么它是\y
,而不是\b
:“在其他GNU软件中,单词边界运算符为'\b'。但是,这与awk语言将“\b”定义为退格相冲突,因此gawk使用了不同的字母。另一种方法是在GNU操作符中需要两个反斜杠,但这被认为太令人困惑了。”——@mklement0嘿,你说得对……我删除了nawk
引用,但添加了busybox
awk
实现,它也支持\
(但似乎不支持\y
)。感谢您的更新;我冒昧地删除了GNU awk信息的+1;您指的是哪个nawk
?在一些平台上,例如Ubuntu 12.04,nawk
仅仅是gawk
的符号链接。至于为什么它是\y
,而不是\b
:”在其他GNU软件中,单词边界运算符为“\b”。但是,这与awk语言将“\b”定义为退格相冲突,因此gawk使用了不同的字母。另一种方法是在GNU操作符中需要两个反斜杠,但这被认为太令人困惑了。”——@mklement0嘿,你说得对……我删除了nawk
引用,但添加了busybox
awk
实现,它也支持\
(但似乎不支持\y
)。感谢您的更新;我冒昧地删除了问题已解决…非常快速和正确的响应。问题已解决…非常快速和正确的响应。
awk -v s1='(^| )raj( |$)' -v s2='(^| )rohit( |$)' '{
print ($0~s1 || $0~s2)? "found": "not found"}' file
found
found
found
not found
found
not found
$ awk '!/\yraj\y/&&!/\yrohit\y/{printf "Not "} {print "Found"}' test.txt
Found
Found
Found
Not Found
Found
Not Found
$ awk '!/\<raj\>/&&!/\<rohit\>/{printf "Not "} {print "Found"}' test.txt
Found
Found
Found
Not Found
Found
Not Found
$ busybox awk '!/\<raj\>/&&!/\<rohit\>/{printf "Not "} {print "Found"}' test.txt
Found
Found
Found
Not Found
Found
Not Found