在什么正则表达式永远不会匹配? /$./作为回应.我玩了一下,发现以下两行代码产生不同的输出.第二场比赛,但第一场比赛没有.有谁能解释为什么?
$ 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',第二次打印空白行)
我试图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.为什么?
问候
如何使用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) 所以,我正在尝试让程序读取文件并打印出晴天,阴天和下雨天的数量.它只是保持打印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) 我在尝试运行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)
为什么会有所不同?
看到了脚本(见下文),但找不到更多关于"-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它的信息(虽然它可能只是一个数字字符串??没有别的更多)
我似乎无法按照我的意愿对以下数据进行排序;
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'一直向下可能会增加.可以考虑这种因素吗?
我在这里有一个问题,我真的不知道从哪里开始
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并使用算术运算符(+, - 等).
一个简单的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) 这困扰我.它给了我一个警告
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.
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,我编译了main.c. 然后我正在尝试创建main.o,但我很困惑如何这样做.我在UNIX中使用vi编辑器.我试过gcc -o main.c,我得到一个致命的错误,说没有输入文件.什么地方出了错?