如何使用 grep、sed、awk 或其他 Linux 工具在文件的每一行中搜索序列“\t$month\t$day\n”?

如何使用 grep、sed、awk 或其他 Linux 工具在文件的每一行中搜索序列“\t$month\t$day\n”?

如何使用 grep、sed、awk 或其他 Linux 工具或 bash 脚本在文件的每一行中搜索序列“\t$month\t$day\n”,其中...

\t = tab  
\n = new line  
$month = Sep   #$month is a variable with the content “Sep”  
$day = 4       #$day is a variable with the content “4”? 

使用 grep,我可以分别找到 \t、\n、$month 和 $day,但为了减少误报,我希望工具在文件的每一行中搜索组合“\t$month\t” $day\n”,并在匹配时将行发送到标准输出,即控制台。

如何搜索文件每行的组合“\t$month\t$day\n”,并使工具将每个匹配行输出到控制台?

示例:以下是文件“start-with-core”的内容

$ cat start-with-core  
core4321        Sep     3  
core.1234       Nov     4  
core4   Sep     4  
core10  Sep     4  
core11  Nov     4  
core44  Sep     2  
core400 Sep     3  

第一个字段(列)后有一个制表符,第二个字段后有一个制表符,第三个字段后有一个换行符。

$ echo $month  
Sep  
                                                                             
$ echo $day    
4  

$ grep $'\n'  start-with-core  
core4321        Sep     3  
core.1234       Nov     4  
core4   Sep     4  
core10  Sep     4  
core11  Nov     4  
core44  Sep     2  
core400 Sep     3  

$ grep $'\t'  start-with-core  
core4321        Sep     3  
core.1234       Nov     4  
core4   Sep     4  
core10  Sep     4  
core11  Nov     4  
core44  Sep     2  
core400 Sep     3  

$ grep "$month"  start-with-core  
core4321        Sep     3  
core4   Sep     4  
core10  Sep     4  
core44  Sep     2  
core400 Sep     3  

$ grep "$day" start-with-core
core4321        Sep     3  
core.1234       Nov     4  
core4   Sep     4  
core10  Sep     4  
core11  Nov     4  
core44  Sep     2  
core400 Sep     3  

有任何想法吗?谢谢!学生

///\\

答案1

grep查找与模式匹配的行,因此您似乎想要查找符合以下条件的行:结尾\t$month\t$day

所以:

TAB=$(printf '\t') # or TAB=$'\t' with many shells
grep "$TAB$month$TAB$day\$" < your-file

其中$(此处已转义,因为 shell 会使用它来进行参数扩展,即使在大多数 shell 中,后跟 时不转义是安全的"),匹配主题末尾。

awk适合处理表格数据。您可以使用它来匹配最后一个字段$day和倒数第二个字段的行$month

M=$month D=$day awk -F '\t' '
  $NF == ENVIRON["M"] && $(NF-1) == ENVIRON["D"]
  ' < your-file

awk==如果两个操作数看起来都像数字并且没有像这里那样显式键入为字符串,则进行数字比较,因此它会匹配 on但也会Sep 4匹配Sep 04// 4.0...4e0

相关内容