Regex 将包含子字符串前缀的行替换为字符串
我想在包含子字符串的字符串前面加前缀/打印,如下所示。 这里,substring是指VIDIOC,这里我想记录的字符串是VIDIOC_S_CTRL,作为一个例子 发件人: 致: 我试着用sed进行网络搜索,但做不到。Regex 将包含子字符串前缀的行替换为字符串,regex,awk,sed,pattern-matching,Regex,Awk,Sed,Pattern Matching,我想在包含子字符串的字符串前面加前缀/打印,如下所示。 这里,substring是指VIDIOC,这里我想记录的字符串是VIDIOC_S_CTRL,作为一个例子 发件人: 致: 我试着用sed进行网络搜索,但做不到。 有人能帮忙吗?gawk-特定 awk '{match($0,/VIDIO\w*/,a); print "ALOGI(\""a[0]"\");",$0}' input.txt 输出: ALOGI("VIDIOC_G_FMT"); ret = ioctl(drv_ctx.video_
有人能帮忙吗?
gawk
-特定
awk '{match($0,/VIDIO\w*/,a); print "ALOGI(\""a[0]"\");",$0}' input.txt
输出:
ALOGI("VIDIOC_G_FMT"); ret = ioctl(drv_ctx.video_driver_fd, VIDIOC_G_FMT, &fmt);
ALOGI("VIDIOC_S_CTRL"); if(ioctl(drv_ctx.video_driver_fd, VIDIOC_S_CTRL, &control)) {
您可以使用反向引用:
sed '/VIDIO/ s/.*\(VIDIO\w*\)/ALOGI("\1"); &/' inputfile
或
所以你想用VIDIOCNo替换VIDIOC_G_FMT,我想用ALOGI(“VIDIOC*”)替换包含VIDIO*的行;和原来的路线。请看一看我提到的例子。太好了。一切正常。Thanks@BalamuruganA:如果此答案对您有效且您满意,请单击左侧的勾号接受此答案。谢谢,谢谢。但是,得到了一个错误“awk:line 1:syntax error at or near”,无论如何,devnull的命令解决了我的问题
\w
,并且match()
的第三个参数是不可移植的(可能仅限于新的ish gawk)
ALOGI("VIDIOC_G_FMT"); ret = ioctl(drv_ctx.video_driver_fd, VIDIOC_G_FMT, &fmt);
ALOGI("VIDIOC_S_CTRL"); if(ioctl(drv_ctx.video_driver_fd, VIDIOC_S_CTRL, &control)) {
sed '/VIDIO/ s/.*\(VIDIO\w*\)/ALOGI("\1"); &/' inputfile
sed -r '/VIDIO/ s/.*(VIDIO\w*)/ALOGI("\1"); &/' inputfile