Articles of unix

regcmp模式$ 0的含义

我试图了解regcmp()和regex()工作的。 我的代码是 int main() { char *newcursor, *name; char *string; char ret0[9]; name = regcmp("([A-Za-z][A-za-z0-9]{0,4})$0", (char *)0); printf("name %s\n",&(*name)); newcursor = regex(name, "filter:attrsonly:attrs", ret0); printf("newcursor %s and ret0 %s\n",newcursor,ret0); return 0; } 这里在第12行在模式结尾处的$0是什么([A-Za-z][A-za-z0-9]{0,4})$0是什么意思? 我用LINUX中的regexec()和regcomp()函数replaceregex()和regcmp() ,将代码从UNIX移植到LINUX,因为regcmp()和regex()在LINUX中不存在。 如果我从模式中删除$0 ,它只会在LINUX执行regcomp()时给出预期的结果。 $0是什么意思?

使用csvfix for linux对数值进行sorting – 将数字转换为string

我正在使用csvfix根据第二列中的整数(计数器)值对CSV文件进行sorting。 但是,似乎csvfix在文件中的所有字段中都放置了双引号,并在执行sorting之前将它们转换为string。 结果是行按string值sorting,“1000”在“2”之前。 有一个命令行选项-smq应该是“聪明的引用”,但这不是帮助我。 如果我使用命令csvfix echo -smq file.csv ,则输出在数字字段周围没有引号,但当我将其转换为csvfix sort -f 2 file.csv ,该文件被写入不带引号,但仍按“string顺序”。 是否在sort命令中包含-smq标志也没有区别。 此外,我想csvfix忽略string头的第一行。 Csvfix问题跟踪声明已经实现,但我只能find-ifn标志,似乎完全切割标题行。 这些对于这个工具来说似乎是非常基本的function,所以我可能错过了一些非常简单的东西。 希望有人在这里使用了csvfix并想通了。

Ubuntu脚本来编译多个Java文件?

我知道这个命令是javac file_name.java但是我怎样才能把一个可以编译几个java文件的shell脚本放在一起呢? 我也在考虑复制文件,我认为我只是使用cp和绝对文件path引用。

为每列添加多个值

我真的很新使用awk / sed 所以,我有一个名为performance.log的文本文件,它具有以下信息 CPU 1 2 3 4 5 6 RAM 2 3 4 5 6 7 HAR 3 4 5 6 7 8 在performance-eval.sh中的代码中,函数生成以下信息 Cur_CPU=10 Cur_RAM=11 Cur_HAR=13 我想插入并保存Cur_CPU,RAM,HAR到performance.log。 Cur_CPU将进入第一行,第二列Cur_RAM将进入第二行,第二列Cur_HAR将进入第三行,第二列 所以,结果performance.log会 CPU 10 1 2 3 4 5 6 RAM 11 2 3 4 5 6 7 HAR 13 3 4 5 6 7 […]

我将如何将多个目录压平并叠加到一个目录中?

我想获取一个目录层次结构的列表,并将它们拼合成一个单独的目录。 稍后在列表中的任何重复文件将replace较早的文件。 例如… foo/This/That.pm bar/This/That.pm bar/Some/Module.pm wiff/This/That.pm wiff/A/Thing/Here.pm 这将结束 This/That.pm # from wiff/ Some/Module.pm # from bar/ A/Thing/Here.pm # from wiff/ 我有一个可能复杂的Perl程序来做到这一点。 我对用户可能解决它的聪明方式感兴趣。 大的障碍是“根据需要创build中间目录”,也许有一些basename和dirname的组合。 我正在解决的真正的问题是检查两个安装的Perl库之间的区别。 我首先将每个Perl的多个库目录展平成一个目录,模拟Perl如何search一个模块。 然后我可以把它们分开。

检查string的第一个N行的bash文件

我想写一个bash脚本,可以通过并只检查文件的前N行以匹配特定的string。 我能够编写一个简单的命令来检查整个文件,但包含在大于N的行中的信息可能不准确。 这是我目前的实施 find . -exec egrep -H -m 1 -l "\<$month/$day/$year\>" {} \; 我正在考虑使用头function修剪文件,但这似乎并没有工作。 有什么build议么? 提前致谢

sed两种模式search,并在第二种模式发生后追加线

以下sed问题在过去的两天里给了我很多的麻烦。 我有以下文件(iptables) : someline someline *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] someline 我想使用sedsearch模式*filter ,如果匹配,然后search第二个模式[0:0] ,然后在第二个模式的最后一次出现后添加一行。 这(理想情况下)会导致: someline someline *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] TESTLINEADDEDBYSED someline 这里的论坛给了我一个好的开始,但是我不能解决这个具体问题。 我到目前为止有以下解决scheme,但它添加第一个出现的第二个模式[0:0] : sed -n '/\*filter/{:a;N;/^\n/s/^\n//;/\[0:0\]/{!ba;p;s/.*/TESTLINEADDEDBYSED/;};ba}; p' file 我是在第二个分支我会消耗(读:skip?)第一次出现[0:0]的假设.* 我在这里误解了什么?

当使用信号捕捉叉时程序变得无限

嗨,每一个,而做一些实验使用叉子和信号,我遇到了一个程序,显示非常有趣的行为,但经过数小时的努力,我无法弄清楚发生了什么事情。 我想要做的是我在主体内创build一个subprocess,然后打印“你好世界”,然后调用退出。 在这之后,我们完全明白它的信号处理程序会被调用,并且等待系统调用阻塞的父进程也会被调用。 现在我正在信号处理程序中创build另一个进程,但是从那里开始,输出变得无限。 输出是这样的:Hello world来到Linux来到UNIX来到Linux来到UNIX来到Linux来到UNIX来… 另外为什么来到Linux打印一遍又一遍。 也请告诉我什么时候拨叫,我知道重复的地址空间是由父母,但信号处理程序呢? 他们也得到重复吗? 在我的情况下,当小孩叫退出。 然后被调用的信号处理程序是孩子或父母。 请帮忙。 谢谢。 void sig_handler(int signo) { if(fork() == 0){ } else{ int pid = 0; wait(&pid); printf("Come to unix"); fflush(stdout); } } int main() { if (signal(SIGCHLD, sig_handler) == SIG_ERR){ } int child_pid; int i; child_pid = fork(); switch (child_pid) { case -1: perror("fork"); […]

无法看到从Java类执行的Perl输出

我正在使用Java类在Linux机器上执行Perl脚本。 .class正在成功创build。 但是当我执行这个类的时候,它说exit code successful as sop ,但是我不能够看到Perl的输出或者脚本的执行。 如果我直接执行Perl,它工作正常… 这是Perl脚本: #!/usr/local/bin/perl print ("Enter the distance to be converted:\n"); $originaldist = <STDIN>; chop ($originaldist); $miles = $originaldist * 0.6214; $kilometers = $originaldist * 1.609; print ($originaldist, " kilometers = ", $miles, " miles\n"); 这是我的Java类来调用脚本: import java.io.InputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; class test { public […]

当父进程和subprocess读取相同的文件并写入其他同一文件时会发生什么?

#include <fcntl.h> #include <stdlib.h> int fdrd,fdwt; char c; void rdwrt(); main(int argc,char *argv[]) { if(argc!=3) exit(1); if((fdrd=open(argv[1],O_RDONLY))==-1) exit(1); if((fdwt=creat(argv[2],0666))==01) exit(1); fork(); rdwrt(); exit(0); } void rdwrt() { for(;;) { if(read(fdrd,&c,1)!=1) return; write(fdwt,&c,1); } } 该程序分叉一个subprocess,然后父进程和subprocess尝试读取相同的input文件并写入相同的输出文件。 像这样执行这个程序: [root@localhost]./a.out input output input文件的内容是: abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz 我认为输出文件对input文件应该有相同数量的字符,尽pipe根据这两个进程的竞争,字符顺序可能不一样。 事实certificate,输出文件是: abcdefghijklmnonqbcdefghijklwxyczdefjklpqrstuvwxyz abcefgklmvwxefgklmnopqrstuvw qrstuyz abcdhijxyz 实际上,这两个文件有不同的字符编号 : [root@localhost]wc […]