Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 将包含子字符串前缀的行替换为字符串_Regex_Awk_Sed_Pattern Matching - Fatal编程技术网

Regex 将包含子字符串前缀的行替换为字符串

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_

我想在包含子字符串的字符串前面加前缀/打印,如下所示。 这里,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_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