如何使用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,但是为了减少误报,我希望工具(S)搜索文件的每一行以找到组合“\t$month\t$day”,在匹配时,将该行(S)发送到标准输出,即控制台。
如何搜索文件的每一行的组合“\t$month\t$day\n”,并让工具将每一行匹配的行输出到控制台?
这里是文件“以核心开始”的内容。
$ 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 $ 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
有什么想法吗?谢谢!河口
/\
发布于 2021-09-06 19:58:47
grep
查找与模式匹配的行,因此您似乎希望找到以\t$month\t$day
结尾的行。
所以:
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
上匹配。
https://unix.stackexchange.com/questions/667928
复制相似问题