首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何找到第n个字符串的行号,打印并存储到makefile中的一个变量中?

在makefile中,我们可以使用shell命令来完成这个任务。具体的步骤如下:

  1. 首先,我们需要使用shell命令读取文件的内容并找到第n个字符串所在的行号。假设要查找的字符串是"target_string",文件名是"file.txt",我们可以使用grep命令来实现:
代码语言:txt
复制
LINE_NUMBER = $(shell grep -n "target_string" file.txt | awk -F ":" '{print $$1}')

这个命令会使用grep找到包含目标字符串的行,并使用awk命令提取行号。结果会存储在变量LINE_NUMBER中。

  1. 接下来,我们可以使用echo命令将行号打印出来:
代码语言:txt
复制
$(info Line number is $(LINE_NUMBER))
  1. 最后,将行号存储到makefile中的一个变量中。假设要存储到变量"LINE_NUM"中,可以使用下面的语句:
代码语言:txt
复制
LINE_NUM := $(LINE_NUMBER)

这样,我们就将行号存储到了LINE_NUM变量中。

完整的makefile示例代码如下:

代码语言:txt
复制
target_string := your_target_string
file := your_file.txt

LINE_NUMBER := $(shell grep -n $(target_string) $(file) | awk -F ":" '{print $$1}')

$(info Line number is $(LINE_NUMBER))

LINE_NUM := $(LINE_NUMBER)

.PHONY: all
all:
    @echo "Line number is $(LINE_NUMBER)"

以上代码中的"your_target_string"需要替换为要查找的目标字符串,"your_file.txt"需要替换为要查找的文件名。

请注意,这个方法只能找到第一个匹配的字符串所在的行号。如果要找到所有匹配的字符串所在的行号,可以使用grep命令的"-n"选项,并将结果存储在一个数组中。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供弹性的云服务器实例,可满足各种计算需求。了解更多:云服务器
  • 云函数(SCF):无服务器的事件驱动型计算服务,可实现按需自动弹性扩缩容。了解更多:云函数
  • 云数据库 MySQL 版(TencentDB for MySQL):高性能、可扩展的关系型数据库服务,可满足各种存储需求。了解更多:云数据库 MySQL 版
  • 人工智能开放平台(AI Lab):提供一站式人工智能开发平台,包括视觉、语音、自然语言处理等多项 AI 服务。了解更多:人工智能开放平台
  • 物联网通信(IoT Hub):可实现设备与云端的连接与通信,为物联网应用提供稳定可靠的设备管理和数据传输能力。了解更多:物联网通信
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一个变量在内存如何存储

我们自学习一门高级语言时,都要了解数据成分,可你们知道在高级语言中数据都是如何在内存存储吗?今天我就来介绍一下。...语言:C++ int c=-123; 这只是一个简单定义了一个变量变量名为c,值为-123。 然而我们大家应该都知道,计算机存储数据都会以二进制形式来存储。...首先-13加12肯定是-1,因为有负号,所以是一个有符号int型数值。 所以就要求出这个数补码,我上面说过,有符号数,在内存存储都是补码。...由于我们test2是一个无符号int型变量,所以他就把这个321直接转为了10进制,也就是 ? 看到这里,我相信大家应该明白了变量如何在内存中表示,以及有符号和无符号变量区别了吧。...注意:只有当数值为负数时,在内存才会存补码形式。 比如:int i=124; 虽然我定义一个有符号型int变量,但是由于i是一个正数,所以在内存存储形式为原码: ?

2.8K40

Linux学习-开发工具使用

n个位置 按[gg]:光标移到文本开始 按[shift+g]:光标移到文本末端 按[n+shift+g]:光标移到文本n行 删除文字: 「x」:每按一次,删除光标所在位置一个字符 「n+x」:删除光标所在位置...n行 //注意:dd与“p”配能完成剪切粘贴功能 复制: 「yw」:将光标所在之处到字尾字符复制缓冲区n+yw」:复制n个字缓冲区 「yy」:复制光标所在行缓冲区 「n+yy」:表示拷贝从光标所在该行...「set nonu」后会取消文件 行号 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了 查找字符: 「/关键字」:先按「/」键,再输入您想寻找字符,如果第一次找关键字不是您想要...示图: 五、Linux项目自动化构建工具-make/Makefile 1、背景及概念 一个工程源文件不计数,其按类型、功能、模块分别放在若干个目录makefile定义了一系列规则来指定...对应是目标文件; ^:表示依赖文件列表 执行过程/原理: 在默认方式下只输入make命令,则会在当前目录下找名字叫“Makefile”或“makefile文件 如果找到,它会找文件一个目标文件

3.4K20
  • Linux基础操作

    grep 在文件查找字符串打印出来。 zip/unzip 打包,压缩,解压缩。 -r:递归式压缩,把目录以及子目录一并处理。 tar 打包,压缩,解压。...dd:剪贴,ndd从当前行n行剪贴。 p:粘贴,np粘贴多少次。 u:撤销。 Shift g:光标定位文件结尾。 gg:文件最开始地方。 n Shift g:文件n开始。...l 行号:从行号处开始列,每次列10行。 b 行号:设置断点。 info b:查看断点。 d 断点编号:取消断点 r:运行,遇到断点停止。 c:运行一个断点处停下来。 n:逐过程 s:逐语句。...p 变量名:打印变量信息 bt:调用堆栈。 finish:把当前函数运行结束停下来。...自动化进行程序编译链接,make会在当前文件查找makefile或者Makefile

    48320

    Linux环境基础开发工具

    n + yw」: 复制 ==n 完整字符串==缓冲区 替换;更改;切换大小写 「shift + ~」: 将光标处大小写互相切换 「r」: 替换光标所在处字符。...跳到文件某一行 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章15行。...: 打印表达式值,通过表达式可以修改变量值或者调用函数 display 变量名: 跟踪查看一个变量,每次停下来都显示它值,==相当于vs监视==* undisplay 变量名: 取消对先前设置那些变量跟踪...如果找到,它会找文件一个目标文件(target),在上面的例子,他会找到 “mytmp” 这个文件,并把这个文件作为最终目标文件。...Makefile里主要包含了五东西:显式规则、隐晦规则、变量定义、文件指示和注释 显式规则说明了,如何生成一个或多个目标文件。

    1.9K50

    【Linux】Linux开发工具-vim 编译器-gccg++ 调试器-gdb git操作 项目自动化构建工具-makeMakefile

    finish:执行当前函数返回,然后挺下来等待命令 print(p):打印表达式值,通过表达式可以修改变量值或者调用函数 p 变量打印变量值。...p 变量:打印变量值 11. display 变量名:跟踪查看一个变量 每次停下来都显示它值 12. undisplay:取消对先前设置变量跟踪 13. until X行号:跳至X行 4.3 理解...背景 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程能力 一个工程源文件不计数,其按类型、功能、模块分别放在若干个目录makefile定义了一系列规则来指定,哪些文件需要先编译...那么, make会在当前目录下找名字叫“Makefile”或“makefile文件 如果找到,它会找文件一个目标文件(target),在上面的例子,他会找到“hello”这个文件,并把这个文件作为最终目标文件...hello所依赖hello.o文件不存在,那么make会在当前文件找目标为hello.o文件依赖性,如果找到则再根据那一个规则生成hello.o文件(这有点像一个堆栈过程) 当然,你C文件和H

    8810

    Linux Shell工具篇 - 文本分析工具awk

    介绍 awk是一个强大文本分析工具,相对于grep查找,sed编辑,awk在其对数据分析生成报告时显得尤为强大。...选项参数说明: 选项参数 功能 -F 指定输入文件拆分分隔符 -v 赋值一个用户定义变量 awk内置变量 内置变量 含义 ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列系统环境变量使用...$1表示当前行一个域,$2表示当前行第二域,……以此类推。...文件有root关键字所有行,然后以”:”拆分打印输出7列: awk -F: '/root/{print $7}' passwd # -F: 以':'分隔符拆分每一个列(域)数据 运行效果 4....NF-N) N是几, 就是倒数第几列 运行效果 10.打印1020行第一列 获取1020行第一列信息: awk -F: '{if(NR>=10 && NR<=20) print $1}'

    1.6K20

    009课 gcc和arm-linux-gcc和Makefile

    &变量: 目的:获得变量在内存地址; 返回:变量在内存起始地址; 004节c语言指针复习2指向数组和字符串指针 实例2 我们在pointer_test.c文件一个test2()函数,...3元素字符数组ca(数组名表示该数组存储首地址),然后定义一个字符指针pc,然后通过printf()函数把定义这两变量在内存地址打印出来。...3元素整型数组ia数组名表示该数组存储首地址),初始化值分别为,0x12345678, 0x87654321, 0x13572468, 然后定义一个整型指针pi,然后通过printf()函数把定义这两变量在内存地址打印出来...,我们打印一下变量存储地址*/ printf("&pc =%p\n",&pc); /*第二步:所有变量都可以保存某些值,接着赋值打印*/ //前面已经有pc="abc";...我们直接执行make时候,会在makefile里面找到一个目标然后执行下面的指令生成第一个目标。

    4.9K30

    gdb和makefile讲解

    list 打印行号 list 将所有内容和行号一起打印 2.2 run运行程序 r(run) 运行程序 遇到断点停止 2.3 执行语句 n 或 next:单条执行 对应vs里f10 s或...:禁用断点 enable breakpoints:启用断点 例如: 2.5 跟踪变量 display 变量名:跟踪查看一个变量,每次停下来都显示它值 undisplay:取消对先前设置那些变量跟踪...makefile,从一个侧面说明了一个人是否具备完成大型工程能力 一个工程源文件不计数,其按类型、功能、模块分别放在若干个目录makefile定义了一系列规则来指定,哪些文件需要先编译,哪些文件需要后编译...如果找到,它会找文件一个目标文件(target),在上面的例子,他会找到“test3”这个文件, 并把这个文件作为最终目标文件。 3....如果test3所依赖文件不存在,那么make会在当前文件找目标为test3.c文件依赖性,如果找到则再根据那一个规则生成test3.c文件。(这有点像一个堆栈过程) 5.

    12810

    6_Makefile与GCC

    当gcc在默认路径没有找到头文件时,就到本选项指定目录中去找。在上面的例子创建一个目录,然后创建一个头文件test.h。...一个错误是指10行prntf之前缺少分号。两警告是指7行和8行变量没有使用。...6.4.2 Makefile引入 ​ Makefile引入是为了简化我们编译流程,提高我们开发进度。下面我们用一个例子来说明Makefile如何简化我们编译流程。...第二行我们定义了变量OBJ,赋值字符串”main.o,add.o,sub.o“。其中第三,四,十三行,使用这个变量。这样用到用一个字符串地方直接调用这个变量,无需重复写一大段字符串。 ​...6.5.2.4 赋值符‘+=’ ​ Makefile 变量字符串,有时候我们需要给前面已经定义好变量添加一些字符串进去,此时就要使用到符号“+=”,比如如下: 01 OBJ = main.o add.o

    3.6K10

    Linux 下make命令与Makefile

    其按顺序找这三文件,一旦找到,就开始读取这个文件执行。 当前,我们也可以给make命令指定一个特殊名字Makefile。...) 我们可以注意,这个Makefile并没有写下如何生成hello.o和kitty.o这两目标的规则和命令。...这些奇怪变量我们叫“自动化变量”,后面会详细讲述。 自动化变量 在上述模式规则,目标和依赖文件都是一系列文件,那么我们如何书写一个命令来完成从不同依赖文件生成相应目标?...在上述所列出来自动量变量。四变量(@ 、< 、% 、* )在扩展时只会有一个文件,而另三值是一个文件列表。...如果经过5步,没有模式规则被找到,那么就做更进一步搜索。对于存在于列表一个模式规则: (a) 如果规则是终止规则,那就忽略它,继续下一条模式规则。 (b) 计算依赖文件。

    10.2K20

    sed、awk——运维必须掌握工具

    通常跟参数-n 一起运行 s:替换,用一个字符串替换另一个,注意与c参数区别 3.举例 我们用/ etc/passwd文件来演示,先来看看sed不加参数跟加上-n参数是怎样 ? ?...删除1行,10行,留意行号变化 ? 将passwd文件包含/sbin/nologin替换为/bin/bash打印输出 ?...将passwd文件2行数据替换为test,注意与s参数区别了吧 ? 在passwd文件第二行新增test字符串 ? 在passwd文件第二行插入test字符串 ?...打印passwd每一行数据,并以:为分隔符计算每行字符总数打印在每行数据末尾 ? 打印passwd文件以:为分隔符第三字段即UID>=500数据所在行号 ?...想想日常工作如何要获取文件第几行第几列数据应该如何操作,如打印passwd文件第一行与最后一行第一列数据,sed跟awk结合使用啦。 ?

    83460

    shell脚本扩展「建议收藏」

    ^[A-Z]..$ 搜索行以A至Z一个字母开头,然后跟两任意字母,然后跟一个换行符行。将找到5行。...将找到4行TOM(整行匹配)和5行。注意,*前面有一个空格。...,填充域,0则表示所有域,1表示第一个域, 思考题:如何打印所有记录(以/etc/passwd内容为例) 例4:搜索/etc/passwd有root关键字所有行 这种是pattern(模式)使用示例...) 例6:统计/etc/passwd:文件名,每行行号,每行列数,对应完整行内容: 显示所有账户记录,带有其记录号,并在END部分打印输入文件名 除了awk内置变量,awk还可以自定义变量...如果相应文件长度大于BLOCK_LIMIT变量所规定值,那么该文件将被拷贝一个文件 名含有时间戳文件,原先文件长度将被截断为0。

    5.8K20

    Linux文本处理详细教程

    -type f -user root -exec chown weber {} \; 注:{}是一个特殊字符串,对于每一个匹配文件,{}会被替换成相应文件名; 将找到文件全都copy一个目录...filename -d 指定定界符 cat -f2 -d";" filename cut 取范围 N- N个字段结尾-M 1字段为MN-M NM个字段 cut 取单位...-b 以字节为单位-c 以字符为单位-f 以字段为单位(使用定界符) 示例: cut -c1-5 file //打印第一5字符 cut -c-2 file //打印前2字符 截取文本5...: NR NF $0 $1 $2 NR:表示记录数量,在执行过程对应当前行号; NF:表示字段数量,在执行过程总对应当前行字段数; $0:这个变量包含执行过程当前行文本内容; $1:第一个字段文本内容...迭代每一个字符 ${string:start_pos:num_of_chars}:从字符串中提取一个字符;(bash文本切片) ${#word}:返回变量word长度 for((i=0;i<${#word

    4.3K20

    sed 命令+正则表达式

    sed是一个非交互性性文本编辑器, 它编辑文件或标准输入导出文件拷贝。标准输入可能是来自键盘、文件重定向、字符串变量,或者是一个管道文件。...sed必须通过行号和正则表达式指定要改变文本行 sed怎样读取数据:     sed从文件一个文本行或从标准输入几种格式读取数据,将之拷贝一个编辑缓冲区,然后读命令行或脚本第一条命令,使用这些命令查找模式或定位行号编辑它...        y  传送字符     n      从另一个文本读文本下一行,附加在下一行   {}     在定位行执行命令组     g      将模式2粘贴到/pattern n/ 基本...打印1行3行     打印模式:  sed -n '/movie/'p temp.txt     打印含movie行     使用模式和行号查询:  sed -n '3,/movie/'p temp.txt...   只在3行查找movie打印     显示整个文件:  sed -n '1,$'p temp.txt      $为最后一行     任意字符:  sed -n '/.

    3.4K20

    Linux之文件管理及文本处理

    -type f -user root -exec chown weber {} \; 注:{}是一个特殊字符串,对于每一个匹配文件,{}会被替换成相应文件名; 将找到文件全都copy一个目录...f2 -d";" filename cut 取范围 N- N个字段结尾 -M 1字段为M N-M NM...-c1-5 file //打印第一5字符 cut -c-2 file //打印前2字符 截取文本57列 $echo string | cut -c5-7 3.8. paste...: NR NF $0 $1 $2 NR:表示记录数量,在执行过程对应当前行号; NF:表示字段数量,在执行过程总对应当前行字段数; $0:这个变量包含执行过程当前行文本内容; $1:第一个字段文本内容...迭代每一个字符 ${string:start_pos:num_of_chars}:从字符串中提取一个字符;(bash文本切片) ${#word}:返回变量word长度 for((i=0;i<${

    1.8K20

    Linux之基础开发工具

    1.行号 set nu/nonu 列出行号/取消行号 2.分屏 vs copy.c 同时打开多个文件(代码copy.c是文件名),但是只有一个光标。光标的意义在于选中行或屏幕。...四、makefile(自动化构建工具) makefile一个文件,make是一个命令(执行makefile命令)。...2.makefile语法 make会执行第一个目标文件生成语句 make 目标文件文件名 会执行指定文件语句。 3.如何确保为目标文件每次是否需要重新编译生成?...finish:执行当前函数返回,然后挺下来等待命令 print§:打印表达式值,通过表达式可以修改变量值或者调用函数 p 变量打印变量值。...display 变量名:跟踪查看一个变量,每次停下来都显示它值 undisplay:取消对先前设置那些变量跟踪 until X行号:跳至X行 breaktrace(或bt):查看各级函数调用及参数

    27320

    Shell实用工具

    p print打印, 打印出匹配内容,通常与-n选项和用 s substitute替换, 替换掉匹配内容 = 用来打印被匹配行号 n 读取下一行,遇到n时会自动跳入下一行 特殊符号 命令...action:在找到匹配内容时所执行一系列命令 选项参数说明 选项参数 功能 -F 指定输入文件拆分分隔符 -v 赋值一个用户定义变量 awk内置变量 内置变量 含义 ARGC 命令行参数个数 ARGV...根据分隔符分割后列数 NR 已读记录数, 也是行号 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符 $n $0变量是指整条记录。...示例: 打印匹配行7列数据 搜索passwd文件有root关键字所有行, 然后以":"拆分打印输出7列 awk -F: '/root/{print $7}' passwd # -F: 以':'...' passwd # printf(格式字符串,变量1,变量2,...) # 格式字符串: %ns 输出字符串,n 是数字,指代输出几个字符, n不指定自动占长度 # 格式字符串: %ni 输出整数,n

    7.8K10

    性能工具之linux三剑客awk、grep、sed详解

    在下列情况下,grep 将打印不包含字符串 “boo” 每一行,显示行号,如上一个例子所示 grep -vn "boo" sampler.log 4:machine 6:bungie 7:bark...注意,由于文件行数是4,不能被3整除,所以最后一个命令提前完成,所以最后 “print $0” 命令打印4行,你可以看到我们也打印了行,使用 NR 变量输出行号。...也许最有用功能是对一个字符串进行 “搜索和替换” 一个字符串。...您可以将 sed 命令嵌入使用 '-e' 选项调用 sed 命令行,或者将它们放在一个单独文件 'sed.in' 使用 '-f sed.in' 选项调用 sed。...请注意,默认操作是打印所有不是无论如何匹配,所以如果你想抑制它,你需要使用 '-n' 标志调用 sed,然后你可以使用 'p' 命令来控制打印内容。

    4.1K31
    领券