在C语言中向popen传递字符串时保持双引号
我有一个困境,我试图通过C中的弹出字符串将字符串传递到C中,但要维护字符串中的双引号.字符串读取如下: ssh %s@%s grep -c \"%s\" %s%s 我需要运行此命令,以便它从远程系统上的日志中抓取并返回计数.我将不同的参数传递给字符串,因此它可以生成用户名和密码以及搜索字符串和目标.但是,搜索字符串包含由空格字符隔开的多个单词,因此我需要双引号完整,因此它可以正确解析搜索字符串.但是,到目前为止,Popen一直从字符串中删除双引号,因此搜索未完成.我不确定另一种执行远程SSH命令的方法,或者在语句中保留双引号.有什么想法吗? 谢谢! *编辑:这是我用来生成字符串以及popen命令的完整sprintf语句. sprintf(command, "ssh %s@%s grep -c \"%s\" %s%s", user, server, search, path, file); fd = popen(command, "r"); 解决方案 po
4 2024-04-09
编程技术问答社区
grep是如何工作的?
我试图了解grep的工作方式. 当我说grep "hello" *.*时,grep是否获得2个参数 - (1)要搜索的字符串,即" Hello"和(2)路径*.*?还是外壳将*.*转换为grep可以理解的东西? 在哪里可以获得grep的源代码?我遇到了这个 gnu grep 链接.一个读书文件中的一个说明其不同于unix grep.如何这样? 我想查看grep的freeBSD版本以及它的linux版本(如果它们不同). 解决方案 外壳执行了球(从*形式转换为文件名).如果您有一个简单的C程序: ,您可以通过 #include int main(int argc, char **argv) { for(int i=1; i
0 2024-04-08
编程技术问答社区
如何在C语言中获得grep的输出?
我正在使用function execl()在C代码中执行GREP命令,我想在C程序中使用此命令的输出.我该怎么做? 解决方案 您可以使用popen: #include #include FILE *popen(const char *command, const char *mode); int pclose(FILE *stream); int main(void) { FILE *cmd; char result[1024]; cmd = popen("grep bar /usr/share/dict/words", "r"); if (cmd == NULL) { perror("popen"); exit(EXIT_FAILURE); } while (fgets(result, sizeof(result), cmd)) {
0 2024-04-07
编程技术问答社区
列出C/C++函数(Unix中的代码分析)。
无论我们要维护不熟悉的代码还是检查Apache模块的实现详细信息,我们可以快速穿越代码并概述我们正在查看的内容的概述. GREP满足了我的大部分日常需求,但在某些情况下,它只是不会这样做. 这是它如何提供帮助的一个常见示例.要查找我感兴趣的PHP函数的定义,我可以在命令行中键入此内容: grep -r "function myfunc" . 如果我们知道返回类型,则可以非常快速地适应C或C ++,但是如果我想列出我的班级提供的每种方法,情况就会变得更加复杂: grep "function " ./src/mine.class.php 由于没有单个关键字表示C ++中的函数或方法,并且由于它通常更复杂,所以我认为我需要某种静态代码分析工具,智能使用C预处理器或盲目的信念,编码器遵循了严格的代码指南(whitespace的#,卷发的位置等)以获取这些结果. 您会推荐什么? 解决方案 通过doxygen运行它.它将抱怨缺乏评论,但仍会产生呼叫图并列出所有
2 2024-04-07
编程技术问答社区
如何在源代码中找到一个搜索词
我正在寻找一种在项目的C/C ++代码中搜索给定术语的方法,同时忽略注释和字符串中的任何出现. 由于代码库很大,我正在寻找一种自动 识别与我的搜索词相匹配的代码行的方法,因为它们需要手动检查. 如果可能的话,我想在Linux系统上执行搜索. 背景 所讨论的代码库是带有大量第三方插件的实时信号处理引擎.插件以多种语言(主要是C,以及C ++等)实施;目前我只关心这两种),没有执行任何标准. 我们的代码基库当前使用内置类型float用于浮点数,我们想用typedef替换它,这将使我们能够使用双打. 我们想在实际代码中找到float的所有出现(在注释和打印输出中忽略合法用途). 更复杂的是,在代码有效载荷中有一些(尽管很少)float的使用(尽管很少)检查,而不是运行一些自动搜索和重新定位.) 该代码还包含c-style静态铸件到(float),因此依靠编译器警告识别类型不匹配通常不是选项. 代码库由3000多个(C和C ++)文件组成,累积了约
0 2024-04-06
编程技术问答社区
Linux。阻断,直到文件中的一个字符串被匹配("tail + grep with blocking")。
bash/gnu工具中是否有某种单行方式可以阻止直到文件中的字符串匹配?理想情况下,与超时.我想避免多行循环. 更新:似乎我应该强调,我希望在匹配字符串时结束该过程. 解决方案 感谢两者的答案,但重要的部分是该过程封锁直到找到,然后结束.我发现了这个: grep -q 'PATTERN'
0 2024-04-01
编程技术问答社区
grep if word value greater than value
我这样的文件: 1 51710 . C A . clustered_events;contamination;germline_risk;read_position;t_lod DP=1;ECNT=6;POP_AF=1.000e-03;P_GERMLINE=-1.372e-02;TLOD=4.20 GT:AD:AF:DP:F1R2:F2R1:MBQ:MFRL:MMQ:MPOS:PGT:PID:SA_MAP_AF:SA_POST_PROB 0/1:0,1:1.000:1:0,0:0,1:26:0,136:43:2:0|1:51637_C_T:0.990,0.00,1.00:0.025,0.028,0.947 19 27733067 . A G,C . clustered_events;contamination;germline_risk;multiallelic DP=60
2 2024-03-31
编程技术问答社区
如何使用awk进行多重匹配并在每个模式后打印不同的行数
我有一个大文件,其中千行看起来像: >ENST00001234.1 ACGTACGTACGG TTACCCAGTACG ATCGCATTCAGC >ENST00002235.4 TTACGCAT TAGGCCAG >ENST00005546.9 TTTATCGC TTAGGGTAT 我想抓取特定的ID(>符号之后),例如,ENST00001234.1然后想在比赛后获得线条,直到下一个> [无论行数量如何].我想一次以这种方式进行大约63个ID. 如果我grep ENST00001234.1和ENST00005546.9 ID,则理想的输出应为: >ENST00001234.1 ACGTACGTACGG TTACCCAGTACG ATCGCATTCAGC >ENST00005546.9 TTTATCGC TTAGGGTAT 我尝试了awk '/ENST00001234.1/ENST00005546.9/{print}'但没有帮助. 解决方案 您可以将>设置
4 2024-03-31
编程技术问答社区
如何拆分配对的fastq文件?
我有一个.fastq文件中包含的Illumina配对末端读取,称为"/1",用于读取. 我正在使用grep来拉出单个读取并将它们放入两个相应的文件(一个用于前向读取,一个用于反向. grep -A 3 "/1$" sample21_pe.unmapped.fq > sample21_1_rfa.fq grep -A 3 "/2$" sample21_pe.unmapped.fq > sample21_2_rfa.fq 但是,当我尝试使用文件(fastQC,汇编等)时,它们不起作用.运行时 FastQC我会收到以下错误: Failed to process file sample21_1_rfa.fq uk.ac.babraham.FastQC.Sequence.SequenceFormatException: ID line didn't start with '@' at uk.ac.babraham.FastQC.Sequence.FastQFil
10 2024-03-31
编程技术问答社区
snakemake:隐藏某些规则dag可视化
在我的Snakemake管道中,我有一个"所有"规则,该规则位于工作的底部.本质上是Snakemake的切入点,但除了列出所有所需的输出外,它没有其他操作. 有没有办法将此规则从DAG可视化中隐藏? 解决方案 运行snakemake --dag生成dot图形,可以根据需要进行修改.例如: snakemake --dag > test.dot # edit test.dot to remove node 0 and all edges linking it dot -Tpng test.dot -o test.png 原则上,dot文件的编辑也可以使用grep/sed/awk自动化: snakemake --dag | grep -v "> 0\|0\[label" | dot -Tpng -o test.png
10 2024-03-31
编程技术问答社区
容许错配的Grep,用于子集.fastq。
我正在使用Linux群集上的Bash工作.如果其中包含与查询序列的匹配,我正在尝试从.fastq文件中提取读取.以下是一个示例.fastq文件,包含三个读取. $ cat example.fastq @SRR1111111.1 1/1 CTGGANAAGTGAAATAATATAAATTTTTCCACTATTGAATAAAAGCAACTTAAATTTTCTAAGTCG + AAAAA#EEEEEEEEEEEEEEEEEEEEEEEAEEEEEEEEEEEEEEEEEEEEEEEEEA
8 2024-03-31
编程技术问答社区
Grep认为文本文件是二进制的,但它不是。
我在我们的代码库中遇到了一个.cpp文件,该文件被GREP视为二进制文件.因此,我不能像文本文件一样抓住它,这很烦人,显然不是应该如何成为的.因此,我想知道为什么GREP认为该文件是二进制的并解决了问题. 我试图使用命令 找到任何与众不同的字符 grep -Pna --color -r "[\x00-\x08]|[\x10-\x19]|[\x80-\xFF]" test.cpp 但不会产生任何匹配. 如何找出此问题的原因? 我应该提到我在Windows Git Bash上. 语言环境的输出: LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_ALL= 解决方案 由于
0 2024-03-30
编程技术问答社区
直接替换二进制文件中的文本
我有一个编译的可执行文件(二进制)文件 - mybin - grep指示包含与给定文本字符串的正匹配 - Cats. grep “Cats” mybin Binary file mybin matches 如果我使用-a标志grep,我现在可以看到实际匹配: grep -a “File” mybin (QString)Cats 要明确,这不是二进制文件中的纯文本字符串,即如果我用文本编辑器打开文件,我看不到它. 我想做的是用字符串Bear在二进制文件中替换字符串Cats的出现,然后将可执行文件作为工作可执行文件. 如何在不更改源代码并重新编译二进制文件的情况下执行此操作?这样的操作是否可能在不损坏可执行文件及其操作的情况下进行? 如果可能: 我该怎么做? 我需要注意任何陷阱,例如,替换字符串必须与原始字符串相同(例如不是). 任何帮助将不胜感激. 解决方案 也许,只需使
8 2024-03-30
编程技术问答社区
Linux上的二进制grep?
说我已经生成以下二进制文件: # generate file: python -c 'import sys;[sys.stdout.write(chr(i)) for i in (0,0,0,0,2,4,6,8,0,1,3,0,5,20)]' > mydata.bin # get file size in bytes stat -c '%s' mydata.bin # 14 说,我想使用类似grep的语法找到所有零()的位置. 到目前为止,我能做的最好的是: $ hexdump -v -e "1/1 \" %02x\n\"" mydata.bin | grep -n '00' 1: 00 2: 00 3: 00 4: 00 9: 00 12: 00 但是,此隐式将原始二进制文件中的每个字节转换为多字节ASCII表示,grep在其上进行操作;不完全是优化的主要示例:) Linux是否有类似二进制的grep?可能还可以支持类似正则表达式语法的内容,但也可
2 2024-03-30
编程技术问答社区
如何在一个目录中找到二进制文件?
我需要在目录中找到二进制文件.我想用文件执行此操作,然后我将使用GREP检查结果.但是我的问题是我不知道什么是二进制文件.什么将给出二进制文件的文件命令,或者我应该使用GREP检查什么? 解决方案 这找到了所有基于非文本的,二进制文件和空文件. 编辑 仅使用grep解决方案(来自Mehrdad的评论): grep -rIL . 原始答案 这不需要任何其他工具,除了find和grep: find . -type f -exec grep -IL . "{}" \; -I告诉格雷普假设二进制文件为无与伦比的 -L仅打印无与伦比的文件 .匹配其他任何东西 编辑2 这找到所有非空的二进制文件: find . -type f ! -size 0 -exec grep -IL . "{}" \; 其他解决方案 只需要提及 perl 's -T文本文件的测试,其相反的-B -B. $ find . -type f
2 2024-03-30
编程技术问答社区
使用grep在一个很长的字符串中搜索一个词
我有一个包含独特长字符串的巨大文件.我需要在该文件中搜索一个特定的单词.当然,我不能使用gedit或类似软件,因为它们会插入.因此,解决方案可以是grep.问题在于,如果单词匹配单词,它将完整的字符串返回到外壳中,所以我找不到单词的位置,我无法观察其他附近的单词. 一旦找到我的话,它会立即停止/暂停Grep shell流(例如,比赛之后的一定数量的字符)是否有任何特殊选项? 解决方案 使用-o选项"仅显示与模式匹配的匹配行的一部分." 示例: % cat lorem Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut al
0 2024-03-30
编程技术问答社区
在相应的行中搜索字符串并打开
我在以grep获得的几行中的几行中有几个特定字符串的出现. $ grep -rn --include="*.cpp" mystring lib/mlib/actionbuttonrule.cpp:300: mystring Foobar... lib/mlib/actionbuttonrule.cpp:314: other mystring lib/mlib/item.cpp:3025: /* mystring**/ lib/mlib/item.cpp:3082: mystring Foobar... lib/mlib/item.cpp:3095: Foo mystring bar 我想在相应的行上序列地打开这些文件.我试图用vim来做到这一点,但是到目前为止,在打开线路时还没有成功. 一定不能是vim或grep,但我认为那里必须有某种功能... 解决方案 您可以在VIM的QuickFix列表中
0 2024-03-29
编程技术问答社区
筛选出一个批处理的PING
寻找一种更好的方法来执行此操作,而不是我曾经使用的"副手"方法,因为这是我必须经常经过的过程. 我具有从10.0.1.15到10.0.50.15的一系列IP到ping.第三个八位位章是指物理位置,最后一个八位位于该位置的设备.我需要查看哪些位置没有连接到网络的设备. 我当前的解决方案是: FOR /L %i IN (1,1,50) DO ping -n 1 10.0.%i.15 >> C:\path\to\output\file.txt 这使我像 这样的输出 Pinging 10.0.1.15 with 32 bytes of data: Reply from 10.0.1.15: bytes=32 time=68ms TTL=255 Ping statistics for 10.0.1.15: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip tim
2 2024-03-29
编程技术问答社区
在windows批处理文件中的grep
我正在尝试编写一个Windows批处理文件,该文件将透过特定的HTML索引文件,该文件看起来像这样(简化) Emergency Calls Emergency Calls Emergency Calls Emergency Calls Emergency Calls Emergency Calls 并打印所有文件名中包含任何大写字母的链接,以便不包含任何大写字母. 以下作品在unix中工作: $ grep -v '^E
0 2024-03-29
编程技术问答社区
在一个日志文件中的regexp匹配,返回匹配上方和下方的动态内容
我有一些格式的catchall日志文件,如下所示: timestamp event summary foo details account name: userA bar more details timestamp event summary baz details account name: userB qux more details timestamp etc. 我想搜索userB的日志文件,如果发现的话,请从上述时间戳向下回声,向下(但不包括)以下时间戳.可能会有几个与我的搜索相匹配的事件.在每场比赛周围回荡某种--- start ---和--- end ---会很高兴. 这对于pcregrep -M来说是完美的,对吗?问题是,GNUWIN32的pcregrep用多行式搜索大型文件崩溃,这些捕获的所有日志可以是100兆或更多. 我尝试过的 到目前为止,我的hackish解决方法涉及使用grep -B15 -A30查找匹配的线条和打印周围内容,然后将现
2 2024-03-29
编程技术问答社区