首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用grep、sed、awk或其他Linux工具搜索文件的每一行“\t$month\t$day\n”?

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

Unix & Linux用户
提问于 2021-09-06 19:46:17
回答 1查看 129关注 0票数 0

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

代码语言:javascript
运行
复制
\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,但是为了减少误报,我希望工具(S)搜索文件的每一行以找到组合“\t$month\t$day”,在匹配时,将该行(S)发送到标准输出,即控制台。

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

这里是文件“以核心开始”的内容。

代码语言:javascript
运行
复制
$ 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  

第一个字段(列)后面有一个选项卡,第二个字段后面有一个选项卡,第三个字段后面有一个新行字符。

代码语言:javascript
运行
复制
$ echo $month  
Sep  
                                                                             
$ echo $day    
4  
代码语言:javascript
运行
复制
$ grep $ grep $ 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  有什么想法吗?谢谢!河口/\\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  A4A5A6有什么想法吗?谢谢!河口/\\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  

A5A6

有什么想法吗?谢谢!河口

/\

\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 A4A5A6

有什么想法吗?谢谢!河口

/\

EN

回答 1

Unix & Linux用户

发布于 2021-09-06 19:58:47

grep查找与模式匹配的行,因此您似乎希望找到以\t$month\t$day结尾的行。

所以:

代码语言:javascript
运行
复制
TAB=$(printf '\t') # or TAB=其中,$ (这里转义,因为它被shell用于参数扩展,即使在大多数shell中,在后面跟着"时不转义也是安全的),匹配主题的末尾。awk很适合处理表格数据。您可以使用它来匹配最后一个字段是$day,第二个字段是$month的行:M=$month D=$day awk -F '\t' '
  $NF == ENVIRON["M"] && $(NF-1) == ENVIRON["D"]
  ' < your-file如果两个操作数看起来都类似于数字,并且没有像这里这样显式地键入字符串,那么awk's ==会做一个数字比较,因此它将在Sep 4上匹配,但也在Sep D12上匹配。\t' with many shells
grep "$TAB$month$TAB$day\$" < your-file

其中,D3 (这里转义,因为它被shell用于参数扩展,即使在大多数shell中,在后面跟着D4时不转义也是安全的),匹配主题的末尾。

D5很适合处理表格数据。您可以使用它来匹配最后一个字段是D6,第二个字段是D7的行:

A8

如果两个操作数看起来都类似于数字,并且没有像这里这样显式地键入字符串,那么D9's D10会做一个数字比较,因此它将在D11 D12上匹配,但也在D13 D12上匹配。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/667928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档