小编Neo*_*ash的帖子

从文件中删除控制字符

我想使用linux bash命令从我的文件中删除所有控制字符.

有一些控制字符,如EOF(0x1A),尤其是当我在另一个软件中加载我的文件时导致问题.我想删除这个.

这是我到目前为止所尝试的:

这将列出所有控制字符:

cat -v -e -t file.txt | head -n 10

^A+^X$
^A1^X$
^D ^_$
^E-^D$
^E-^S$
^E1^V$
^F%^_$
^F-^D$
^F.^_$
^F/^_$
^F4EZ$
^G%$
Run Code Online (Sandbox Code Playgroud)

这将使用grep列出所有控制字符:

$ cat file.txt | head -n 10 | grep '[[:cntrl:]]'
+
1

-
-
1
%
-
.
/
Run Code Online (Sandbox Code Playgroud)

匹配cat命令的上述输出.

现在,我运行以下命令来显示所有不包含控制字符的行,但它仍然显示与上面相同的输出(带有控制字符的行)

$ cat file.txt | head -n 10 | grep '[^[:cntrl:]]'
+
1

-
-
1
%
-
.
/
Run Code Online (Sandbox Code Playgroud)

这是十六进制格式的输出:

$ cat file.txt | head -n 10 | grep '[[:cntrl:]]' | …
Run Code Online (Sandbox Code Playgroud)

linux

20
推荐指数
4
解决办法
3万
查看次数

Perl Multi Threaded Program偶尔会崩溃

我在Perl中编写了一个使用多线程的程序.我正在使用这个程序来了解如何在Perl中实现多线程.

首先简要概述一下程序打算做什么:它将从文本文件中一次读取一个URL列表.对于每个URL,它将调用子例程(将URL作为参数传递)并向其发送HTTP HEAD请求.收到HTTP响应标头后,它将从响应中打印服务器标头字段.

对于每个URL,它启动一个调用上述子例程的新线程.

问题:主要问题是程序有时间歇性地崩溃.它在其他时间正常运行.它似乎是不可靠的代码,我相信有一种方法可以使它可靠地工作.

代码:

#!/usr/bin/perl

use strict;
use warnings;
use threads;
use WWW::Mechanize;
no warnings 'uninitialized';

open(INPUT,'<','urls.txt') || die("Couldn't open the file in read mode\n");

print "Starting main program\n";

my @threads;

while(my $url = <INPUT>)
{
    chomp $url;
    my $t = threads->new(\&sub1, $url);
    push(@threads,$t);
}

foreach (@threads) {
    $_->join;
}

print "End of main program\n";

sub sub1 {
    my $site = shift;
    sleep 1;
    my $mech = WWW::Mechanize->new();
    $mech->agent_alias('Windows IE 6');

    # trap any error which occurs while …
Run Code Online (Sandbox Code Playgroud)

perl multithreading

10
推荐指数
2
解决办法
1487
查看次数

Visual Studio C++与psapi.lib的链接

我编写了一个C程序,它调用psapi.h中定义的函数GetModuleInformation()

我使用Microsoft Visual Studio C++命令行编译器(cl.exe)来编译和链接程序.

我已经包含了psapi.h头文件:

#include <psapi.h>
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时使用:

cl program.c
Run Code Online (Sandbox Code Playgroud)

它生成目标文件,但在链接阶段失败并出现错误:

program.obj : error LNK2019: unresolved external symbol _GetModuleInformation@16 ref
erenced in function _main
program.exe : fatal error LNK1120: 1 unresolved externalsprogram.obj : error LNK2019: unresolved external symbol _GetModuleInformation@16 ref
Run Code Online (Sandbox Code Playgroud)

我还将psapi.lib文件放在放置源代码文件(program.c)的同一文件夹中,但即便如此,我也会收到与上面相同的错误消息.

如何使用命令行编译器(cl.exe)成功链接它?

c visual-studio-2010 cl.exe

9
推荐指数
1
解决办法
1万
查看次数

Z3 Int 未定义错误

我正在尝试使用 python 中的 Z3 库,但它不起作用。它给出了一个错误 Int 未定义。

我使用 pip 安装了 z3 模块,如您所见,导入 lib 时没有抛出错误消息。我使用的是 Mac OS X 和 python 版本 2.7.6

>>> from z3 import *
>>> x = Int('x')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Int' is not defined
Run Code Online (Sandbox Code Playgroud)

python z3

8
推荐指数
1
解决办法
3894
查看次数

DOS批处理FOR循环删除不包含字符串的文件

我想删除当前目录中名称中不包含字符串"sample"的所有文件.

例如,

test_final_1.exe
test_initial_1.exe
test_sample_1.exe
test_sample_2.exe
Run Code Online (Sandbox Code Playgroud)

我想删除名称中包含样本的文件以外的所有文件.

for %i in (*.*) do if not %i == "*sample*" del /f /q %i

Is the use of wild card character in the if condition allowed?
Does, (*.*) represent the current directory?
Run Code Online (Sandbox Code Playgroud)

谢谢.

for-loop batch-file

6
推荐指数
1
解决办法
1万
查看次数

使用Perl计算字符串中的连续字符数

我有一个包含多个连续字符序列的字符串,例如:

aaabbcccdddd
Run Code Online (Sandbox Code Playgroud)

我想把它表示为: a3b2c3d4

截至目前,我已经想出了这个:

#! /usr/bin/perl

$str = "aaabbcccdddd";
$str =~ s/(.)\1+/$1/g;

print $str."\n";
Run Code Online (Sandbox Code Playgroud)

输出:

abcd
Run Code Online (Sandbox Code Playgroud)

它将连续字符存储在捕获缓冲区中,并仅返回一个.但是,我想要一种方法来计算捕获缓冲区中连续字符的数量,然后只显示一个字符,后跟该计数,以便它显示输出a3b2c3d4而不是abcd.

上述正则表达式需要进行哪些修改?

regex perl

6
推荐指数
1
解决办法
3282
查看次数

哪个方法对于初始化wchar_t字符串是正确的?

我正在编写一个程序,我需要初始化一个保存文本的消息缓冲区.我能够使它工作,但我在下面用C语言初始化字符串的各种方式编写,我想了解其中的区别.另外,哪种方法最适合初始化wchar_t/char字符串?

方法一:

wchar_t message[100];
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这将分配一个200字节的内存空间(我认为wchar_t的大小是Windows操作系统上的2字节).此内存分配是静态的,并且在编译时将在可执行文件的.data部分内分配.

message也是一个内存地址本身,指向字符串的第一个字符.

这种初始化字符串的方法对我有用.

方法二:

wchar_t *message;
message=(wchar_t *) malloc(sizeof(wchar_t) * 100);
Run Code Online (Sandbox Code Playgroud)

此方法首先将变量消息初始化为指向wchar_t的指针.它是一个广泛的字符数组.

接下来,它将为此字符串动态分配内存.我想我已经正确地编写了它的语法.

当我在我的程序中使用此方法时,它不会读取字符串中的空格后的文本.

Example text: "This is a message"
Run Code Online (Sandbox Code Playgroud)

它只会将"This"读入变量消息,之后不会显示任何文本.

方法三:

wchar_t *message[100];
Run Code Online (Sandbox Code Playgroud)

这将消息定义为包含100个宽字符的数组和指向wchar_t的指针.这种初始化消息的方法很有效.但是,我不确定这是不是正确的方法.因为消息本身指向字符串中的第一个字符.所以,用尺寸初始化它是否正确?

我想更深入地理解它,初始化字符串的正确方法.同样的概念也可以扩展为一串字符.

c arrays wchar-t string-literals

6
推荐指数
2
解决办法
3万
查看次数

HTML Treebuilder XPath提取链接

我正在编写一个基本脚本,它只是从网页中提取所有链接.它是用Perl编写的,并使用WWW :: Mechanize和HTML :: Treebuilder :: Xpath模块,这两个模块都是通过CPAN安装的.

我知道只使用WWW :: Mechanize就可以轻松完成,但是我也想学习使用XPath.

因此,脚本将解析整个网页,并检查每个锚标记的href属性,提取链接并将其打印到控制台/将其写入文件.请注意,在下面的脚本中,我没有使用use strict,因为我只是写这篇文章来澄清和理解使用XPath遍历HTML树的概念.

这是脚本:

#! /usr/bin/perl

use WWW::Mechanize;
use HTML::TreeBuilder::XPath;
use warnings;

$url="https://example.com";

$mech=WWW::Mechanize->new();
$mech->get($url);

$tree=HTML::TreeBuilder::XPath->new();

$tree->parse($mech->content);

$nodes=$tree->findnodes(q{'//a'}); # line is modified later.

foreach $node($nodes)
{
    print $node->attr('href');
}
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误:

Can't locate object method "attr" via package "XML::XPathEngine::Literal" at pagegetter.pl line 23.
Run Code Online (Sandbox Code Playgroud)

我修改了脚本如下:

$nodes=$tree->findnodes(q{'//a/@href'});

while($node=$nodes->shift)
{
  print $node->attr('href');
}
Run Code Online (Sandbox Code Playgroud)

错误:

Can't locate object method "shift" via package "XML::XPathEngine::Literal"
Run Code Online (Sandbox Code Playgroud)

我不确定,如何打印href属性的值.

$ nodes应该包含所有href属性的列表?我相信它不存储价值,而是指向它?

我尝试搜索和阅读示例,但我不知道如何去做.

谢谢.

html perl xpath html-tree

5
推荐指数
1
解决办法
4237
查看次数

Perl中不区分大小写的唯一数组元素

我使用模块导出的uniq函数,List :: MoreUtils来查找数组中的uniq元素.但是,我希望它以不区分大小写的方式查找uniq元素.我怎样才能做到这一点?

我使用Data :: Dumper转储了Array的输出:

#! /usr/bin/perl

use strict;
use warnings;
use Data::Dumper qw(Dumper);
use List::MoreUtils qw(uniq);
use feature "say";

my @elements=<array is formed here>;

my @words=uniq @elements;

say Dumper \@words;
Run Code Online (Sandbox Code Playgroud)

输出:

$VAR1 = [
          'John',
          'john',
          'JohN',
          'JOHN',
          'JoHn',
          'john john'
        ];
Run Code Online (Sandbox Code Playgroud)

预期的输出应该是:约翰,约翰约翰

只有2个元素,其余全部应该被过滤,因为它们是同一个单词,只有区别在于大小写.

如何删除忽略大小写的重复元素?

perl uniq

5
推荐指数
2
解决办法
1333
查看次数

bash awk将字符串拆分为数组

我使用awk使用特定的分隔符将字符串拆分为数组.现在,我想对数组的每个元素执行一些操作.

我能够像这样提取单个元素:

#! /bin/bash

b=12:34:56
a=`echo $b | awk '{split($0,numbers,":"); print numbers[1]}'`
echo $a
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

#! /bin/bash

b=12:34:56
`echo $b | awk '{split($0,numbers,":");}'`
for(i=0;i<length(numbers);i++)
{
   // perform some operation using numbers[i]
}
Run Code Online (Sandbox Code Playgroud)

我如何在bash脚本中做这样的事情?

bash

5
推荐指数
3
解决办法
3万
查看次数