grep sed awk

linux文本处理grep、sed、awk

grep


grep [options] PATTERN [FILE]

grep选项解释
-
-正则表达式的选择
--E, –extended-regexp扩展的正则表达式,同命令egrep(已废弃),字符`? + { }
--G, –basic-regexp基本正则表达式,grep默认执行,字符`? + { }
--F, –fixed-regexp所有搜索都是普通字符串,不进行正则匹配
--P, –perl-regexp使用Perl正则表达式
--e, –regexp=PATTERN用PATTERN来匹配
--f, –file=FILE指定规则文件
--i, –ignore-case忽略大小写
--w, –word-regexp强制PATTERN仅完全匹配字词
--x, –line-regexp强制PATTERN仅完全匹配一行
-
-杂项
--s, –no-messages不显示错误信息
--v, –invert-match选中不匹配的行
-
-输出控制
--m, –max-count=NUMNUM次匹配后停止
--b, –byte-offset输出的同时打印字节偏移
--n, –line-number输出的同时打印行号
--H, –with-filename输出同时打印文件名
--o, –only-matching仅输出匹配的部分
--d, –directories=ACTION读取目录的方式,read/recurse/skip
--r, –recursive--directories=recurse
--l, –files-with-matches仅打印匹配的文件名
--L, –files-without-matches仅打印不匹配的文件名
-
-文件控制
--B, –before-context=NUM打印匹配文本及前NUM行
--A, –after-context=NUM打印匹配文本及后NUM行
--C, –context=NUM打印匹配文本的前后NUM行

sed


sed (stream editor),sed是一个流编辑器,sed把读入的文本,通过一系列编辑命令转换为另一种格式输出。

sed不会改变源文件。

  • sed的命令格式
sed option 'script' file1 file2 ...
sed option -f scriptfile file1 file2 ...

sed处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,命令行参数可以一次传入多个文件,sed会依次处理。sed的编辑命令可以直接当命令行参数传入,也可以写成一个脚本文件然后用-f参数指定。

  • sed的执行的方式
/pattern/action

pattern是正则表达式,action是编辑操作。sed程序一行一行读出待处理文件,如果某一行与pattern匹配,则执行相应的action,如果一条命令没有pattern而只有action,这个action将作用于待处理文件的每一行。

  • 常用选项
sed选项解释
--n取消打印模式空间
--r使用扩展的正则表达式,sed默认运行基本正则匹配
--s将输入文件视为各个独立的文件而不是一个长的连续输入
--u从输入文件中读取最少的数据,更频繁的刷新输出
--f = FILE指定脚本文件
--e = EXP指定脚本
--i直接修改文件的内容

模式空间: 当前sed处理的行

  • 常用命令
格式含义
a新增, a 的后面可以接字串,而这些字串会新增在匹配行的下一行
i插入, i 的后面可以接字串,而这些字串会插入到匹配行的上一行
c取代, c 的后面可以接字串,这些字串取代匹配行
d删除, d 后面通常不接任何东西
p打印,通常 p 会与 -n 选项一起使用
s替换,s替换
--
/pattern/p打印匹配pattern的行
/pattern/d删除匹配pattern的行
/pattern/s/pattern1/pattern2/查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2
/pattern/s/pattern1/pattern2/g查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2
--
-数字可作为行数的索引地址,用逗号分隔
sed ‘1,10d’ a.txt删除1-10

awk


sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。

awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义。

awk是一门很复杂的脚本语言,但基本用法和sed类似,它可以运行基本运算和流程控制。

  • awk命令的基本形式
awk option 'script' file1 file2 ...
awk option -f scriptfile file1 file2 ...
  • awk的执行方式
/pattern/{actions}
condition{actions}

如果某一行与pattern匹配,或者满足condition条件,则执行相应的actions,如果一条awk命令只有actions部分,则actions作用于待处理文件的每一行。
- awk需要熟悉的用法

awk常用的内置变量

变量含义
FILENAME当前输入文件的文件名,该变量是只读的
NR当前行的行号,该变量是只读的,R代表record
NF当前行所拥有的列数,该变量是只读的,F代表field
OFS输出格式的列分隔符,缺省是空格
FS输入文件的列分融符,缺省是连续的空格和Tab
ORS输出格式的行分隔符,缺省是换行符
RS输入文件的行分隔符,缺省是换行符
$0当前整行的内容
1  2 …第一列 第二列 …
BEGIN { … }在整个文件处理之前执行一次
END { … }在整个文件处理完成后执行一次

awk常用选项

awk选项解释
--f,–file=progfile指定awk脚本文件
--F,–field-separator=fs重新指定输入文件的列分隔符 awk -F : ...
--v var = value赋值一个变量 awk -v x=1 ...

变量

awk可以使用变量,但是不需要定义,第一次使用的时候回自动定义变量,变量是全局的。

格式化输出

awk支持printf格式化输出。

$ awk -v x=0 -F '[:, ]' 'BEGIN{OFS="!"} {print $1,$2,$3,$4; x++} END {print x "lines"}' a.txt

## -v 声明一个变量并赋值
## -F 指定输入文件的列分隔符,用[]指定多个分隔符
## OFS='!' 指定输出分隔符为!
## END 输出行数
### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值