小编Wil*_*ell的帖子

为什么m /$./ m会给我意想不到的行为?

什么正则表达式永远不会匹配? /$./作为回应.我玩了一下,发现以下两行代码产生不同的输出.第二场比赛,但第一场比赛没有.有谁能解释为什么?

$ printf 'a\nb\n' | perl -0777 -ne 'print if m/$./m'
$ perl -0777 -e '$_="a\nb\n"; print if m/$./m'
Run Code Online (Sandbox Code Playgroud)

另请注意,在下面添加<>会导致匹配失败:

$ printf 'a\nb\n' | perl -0777 -e '$b = "a\nb\n"; say $b =~ m/$./m'
$ printf 'a\nb\n' | perl -0777 -e '$b = "a\nb\n"; <>; say $b =~ m/$./m'
Run Code Online (Sandbox Code Playgroud)

(也就是说,第一次打印'1',第二次打印空白行)

regex perl

0
推荐指数
3
解决办法
181
查看次数

CommandLine参数不起作用C.

我试图File1.txt ">" File2.txt作为终端参数传递给我的程序,以覆盖cat命令.但由于某种原因,该计划无法运作.虽然argc在上面定义的情况下是4,但程序中的条件仍未实现.这是代码:

int main(int argc, char *argv[])
{
int readbytes,fp;
char buf[1024];

if(argc==2)
{
    fp=open(argv[1],O_RDONLY);
    dup2(0,fp);
    close(fp);
    readbytes=read(STDIN_FILENO,buf,1024);
    write(STDOUT_FILENO,buf,readbytes);
}

if(argc==4)
{
    printf("inside4");
    fp=open(argv[1],O_RDONLY);

    dup2(fp,0);

    close(fp);

    fp=open(argv[3],O_WRONLY|O_CREAT|O_TRUNC,S_IRWXU);

    dup2(fp,1);

    close(fp);

    readbytes=read(STDIN_FILENO,buf,1024);

    //printf("%c",buf);

    write(STDOUT_FILENO,buf,readbytes);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我找不到这个问题的解决方案,所以我现在就把它留给专家.这个问题的原因是什么?

注意:

出于某种原因,当我发送./prog File1.txt> File2.txt到程序时,argc==2条件被选中,但是argc是4.为什么?

问候

c unix terminal cat

0
推荐指数
1
解决办法
323
查看次数

创建一个包含2列的文件,每个文件来自不同的文件

如何使用perl或awk获得以下输出或者是否可以在linux命令中使用?

文件1:

1
2
2
4
Run Code Online (Sandbox Code Playgroud)

文件2:

5
6
7
8
Run Code Online (Sandbox Code Playgroud)

期望的输出:

1   5
2   6
2   7
4   8
Run Code Online (Sandbox Code Playgroud)

linux perl awk

0
推荐指数
1
解决办法
1450
查看次数

C++程序无法从文件中读取字符

所以,我正在尝试让程序读取文件并打印出晴天,阴天和下雨天的数量.它只是保持打印0.我缺少什么?我试图将文件从.dat更改为.txt但仍然是相同的结果.这是数据文件中的内容:

RRCSSSCSCRRRCSCSCSSRSCCRCRRCSS SSSCCSSSCCSSSCCSSSCRCRCCSSSSSS SSSSCSSSCSSSCRRCCCSSSSSCSSSSCS

  #include <iostream> 
    #include <fstream>
    #include <iomanip>
    #include <string>  

    using namespace std;

    int main()

    {  

    const int MONTH = 3;

    const int DAY = 30;

    char name[MONTH][DAY] = {"June", "July", "August"};
    char rain = 'R'; 
    char sun = 'S';    
    char cloud = 'C';    
    char letter;    
    int day = 0;    
    int count = 0;    
    int rainy = 0;    
    int cloudy = 0;
    int sunny = 0;          

    ifstream inputFile;

    cout << " Weather for Summer Months\n";

    cout << "--------------------\n\n"; …
Run Code Online (Sandbox Code Playgroud)

c++ arrays loops file

0
推荐指数
1
解决办法
1114
查看次数

命令输出和perl输出不同

我在尝试运行shell命令时检索正确的信息时遇到问题.当我在服务器上运行命令时,我得到了正确的输出,但是当它通过perl脚本运行时我得不到相同的结果.

$test = `pkginfo | grep TestPackage | awk '{print $2}'`;
print "$test\n";
Run Code Online (Sandbox Code Playgroud)

直接从shell运行时的输出是:

TestPackage
Run Code Online (Sandbox Code Playgroud)

虽然perl脚本的输出是:

application TestPackage       Description
Run Code Online (Sandbox Code Playgroud)

为什么会有所不同?

shell perl

0
推荐指数
1
解决办法
76
查看次数

脚本中的"-n"是什么?

看到了脚本(见下文),但找不到更多关于"-n"的信息.

my $numeric =0;
my $input = shift;
if ($input eq "-n") {
    $numeric =1;
    $input = shift;
}
my $output = shift;
open INPUT, $input or die $!;
open OUTPUT, ">$output" or die $!;
my @file = <INPUT>;
if ($numeric) {
    @file = sort { $a <=> $b } @file;
} else {
   @file = sort @file;
}
print OUTPUT @file;
Run Code Online (Sandbox Code Playgroud)

解释脚本的文本说明如下"如果我们在程序名称之后在命令行上看到的第一件事是字符串-n,那么我们正在进行数字排序." Google搜索似乎无法识别大多数"非字母数字"符号,因此"-n"搜索不会产生任何效果.我看到的唯一另一个地方"-n"是学习perl,它说下面的"转换后的sed脚本可以使用或不使用-n选项".甚至不确定这是否与"-n"脚本中的相同.任何想法,我可以找到更多关于-n它的信息(虽然它可能只是一个数字字符串??没有别的更多)

perl

0
推荐指数
1
解决办法
128
查看次数

Bash/Linux使用自定义字段分隔符按第3列排序

我似乎无法按照我的意愿对以下数据进行排序;

find output/ -type f -name *.raw | sort 
output/rtp.0.0.raw
output/rtp.0.10.raw
output/rtp.0.11.raw
output/rtp.0.12.raw
output/rtp.0.13.raw
output/rtp.0.14.raw
output/rtp.0.15.raw
output/rtp.0.16.raw
output/rtp.0.17.raw
output/rtp.0.18.raw
output/rtp.0.19.raw
output/rtp.0.1.raw
output/rtp.0.20.raw
output/rtp.0.2.raw
output/rtp.0.3.raw
output/rtp.0.4.raw
output/rtp.0.5.raw
output/rtp.0.6.raw
output/rtp.0.7.raw
output/rtp.0.8.raw
output/rtp.0.9.raw
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我没有向sort命令传递任何参数.无论我使用什么选项,我都无法接近我想要的结果.我想要以下输出;

find output/ -type f -name *.raw | sort 
output/rtp.0.0.raw
output/rtp.0.1.raw
output/rtp.0.2.raw
output/rtp.0.3.raw
output/rtp.0.4.raw
output/rtp.0.5.raw
output/rtp.0.6.raw
output/rtp.0.7.raw
output/rtp.0.8.raw
output/rtp.0.9.raw
output/rtp.0.10.raw
output/rtp.0.11.raw
output/rtp.0.12.raw
output/rtp.0.13.raw
output/rtp.0.14.raw
output/rtp.0.15.raw
output/rtp.0.16.raw
output/rtp.0.17.raw
output/rtp.0.18.raw
output/rtp.0.19.raw
output/rtp.0.20.raw
Run Code Online (Sandbox Code Playgroud)

我已尝试使用-t .选项将字段分隔符设置为句点.此外,我已经尝试用-k指定字段选项,-g,-h,-n,但没有的选项帮助.除非我没有正确理解手册页而忽略了我的答案,否则我在手册页中看不到任何可以按要求执行的操作.

我能否生成我需要的结果sort,如果是,如何?

此外,它变得罕见但有时第二列显示为'0'一直向下可能会增加.可以考虑这种因素吗?

linux sorting

0
推荐指数
1
解决办法
4935
查看次数

子串出现

我在这里有一个问题,我真的不知道从哪里开始

s1.find(s2)
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

变量s1和s2指的是strs.表达式s1.find(s2)返回s1中第一次出现s2的索引.表达式s1.find(s2,5)返回s1中第一次出现s2的索引,从s1中的索引5开始.(有关详细信息,请参阅help(str.find))

写一个表达式,生成s1中第二次出现s2的索引.如果s2在s1中没有出现两次,则表达式应该生成-1.与str.count不同,您应该允许重叠出现s2.

例如,如果s1为"banana"且s2为"ana",则表达式应返回3.如果s1为"apple"且s2为"p",则表达式应返回2.

你的答案必须是一个不使用方括号的单个表达式(字符串索引和切片),你只能调用方法str.find并使用算术运算符(+, - 等).

python substring

0
推荐指数
1
解决办法
3886
查看次数

awk -F命令无法在linux中运行

一个简单的awk命令无法正常工作..

请告诉我这里有什么问题......

echo "hi hai hello" | awk -F"h" '{print $1}'
Run Code Online (Sandbox Code Playgroud)

我试过Linux和solaris,没有任何显示......

产出:

-bash-3.00$ echo "hi hai hello" |awk -F"h" '{print $1}'

-bash-3.00$
Run Code Online (Sandbox Code Playgroud)

unix bash awk

0
推荐指数
1
解决办法
394
查看次数

如何将字符串值传递给C中的函数

这困扰我.它给了我一个警告

passing argument 1 of ‘funcName’ discards qualifiers from pointer target type
Run Code Online (Sandbox Code Playgroud)

但是,程序运行得很好并打印提交的值.

功能如下

void funcName(char *str) {
    printf("%s", str);
}

void main() {
    funcName("Hello world");
}
Run Code Online (Sandbox Code Playgroud)

输出是Hello world.

c string

0
推荐指数
1
解决办法
92
查看次数

如何在变量赋值中获得"最多一次"语义?

Shell命令有时需要很长时间才能运行,因此您可能不想这样做VAR = $(shell slow-cmd) (=每次引用变量时都会运行slow-cmd).使用VAR := $(shell slow-cmd)可能很有用,但是如果您正在构建一个不需要扩展变量的目标,那么您将获得slow-cmd比所需更多的调用.在下面的makefile(使用gnu-make)中,您可以获得所需的行为:定义V2值的shell命令永远不会被多次调用,而对于目标,foo它根本不会被调用.但这是一个令人发指的污垢.是否有更合理的方法来确保变量仅在需要时定义,但从未评估过多次?

V1 = $(shell echo evaluating V1 > /dev/tty; echo V1 VALUE)

all: foo bar V2
        @echo $(V1) $@
        @echo $(V2) $@

foo:
        @echo $(V1) $@

bar: V2
        @echo $(V1) $@
        @echo $(V2) $@

V2:
        $(eval V2 := $(shell echo evaluating V2 > /dev/tty; echo V2 VALUE))

.PHONY: all foo bar
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

0
推荐指数
1
解决办法
110
查看次数

C:编程:如何从main.c创建main.o?

我正在尝试编写一个makefile,我编译了main.c. 然后我正在尝试创建main.o,但我很困惑如何这样做.我在UNIX中使用vi编辑器.我试过gcc -o main.c,我得到一个致命的错误,说没有输入文件.什么地方出了错?

c unix

-3
推荐指数
1
解决办法
1166
查看次数

标签 统计

perl ×4

c ×3

unix ×3

awk ×2

linux ×2

arrays ×1

bash ×1

c++ ×1

cat ×1

file ×1

gnu-make ×1

loops ×1

makefile ×1

python ×1

regex ×1

shell ×1

sorting ×1

string ×1

substring ×1

terminal ×1