小编Dan*_*Dan的帖子

如何在Linux中查看日志文件并在查看时应用自定义过滤器?

我需要阅读Linux系统上的一些巨大的日志文件.日志中有很多混乱.目前我正在做这样的事情:

cat logfile.txt | grep -v "IgnoreThis\|IgnoreThat" | less
Run Code Online (Sandbox Code Playgroud)

但它很麻烦 - 每次我想添加另一个过滤器时,我都需要退出less并编辑命令行.一些滤波器相对复杂并且可以是多线的.

我想通过日志阅读一些方法来应用过滤器,以及在某处保存这些过滤器的方法.

有没有可以为我做这个的工具?我无法安装新软件,所以希望它已经安装好了 - 例如,less,vi,Python或Perl lib等等.

更改生成日志以生成更少的代码不是一种选择.

linux logfiles filter

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

Qt:在使用foreach宏迭代的同时删除QList元素?

我是Qt的新手,并试图学习成语.

foreach文件说:

Qt在进入foreach循环时自动获取容器的副本.如果在迭代时修改容器,则不会影响循环.

但它没有说明如何在迭代时删除元素foreach.我最好的猜测是这样的:

int idx = 0;
foreach (const Foo &foo, fooList) {
  if (bad(foo)) {
    fooList.removeAt(idx);
  }
  ++idx;
}
Run Code Online (Sandbox Code Playgroud)

看起来很丑陋,不得不idx在循环外部(并且必须保持一个单独的循环计数器).

此外,我知道这foreach是一个QList便宜的副本,但是一旦我删除一个元素会发生什么 - 是否仍然便宜或是否有昂贵的复制修改?是的,深层复制发生了.

编辑:这似乎不是惯用的Qt.

for (int idx = 0; idx < fooList.size(); ) {
  const Foo &foo = fooList[idx];
  if (bad(foo)) {
    fooList.removeAt(idx);
  }
  else ++idx;
}
Run Code Online (Sandbox Code Playgroud)

c++ foreach qt qlist

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

为什么std :: vector的元素不需要默认构造函数?

如何编写自己的数组类,不需要为其元素提供默认构造函数?现在,当我执行new []来分配空间时,我需要一个默认的构造函数.

std :: vector没有.

他们如何做到这一点?

c++ vector default-constructor

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

有关引用数组参数的用处是什么?

我最近发现了一些这样的代码:

typedef int TenInts[10];
void foo(TenInts &arr);
Run Code Online (Sandbox Code Playgroud)

你能做些什么foo()是有用的,如果宣言是:

void foo(int *arr);    // or,
void foo(int arr[]);   // or,
void foo(int arr[10]); // ?
Run Code Online (Sandbox Code Playgroud)

我发现了一个问题,询问如何传递对数组的引用.我猜我在问为什么.

此外,只有一个答案 "何时指向数组的指针有用?" 讨论了函数参数,所以我不认为这是一个重复的问题.

c++ arrays pass-by-reference

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

链接时LD_LIBRARY_PATH和-L有什么区别?

LD_LIBRARY_PATH链接时遇到问题(这个问题与运行时间无关).

当我运行make时,链接行看起来像这样(这是一个使用g ++版本4.1.x的Linux系统):

g++ a.o b.o c.o -o myapp \
 -L/long/path/to/libs/ \
 -L/another/long/path/ \
 -labc -ldef -lghi
Run Code Online (Sandbox Code Playgroud)

-l选项参考存在于由指定的目录共享库(例如,libabc.so)-L选项.这些目录也出现在LD_LIBRARY_PATH.使用该配置,链接成功,我可以运行该应用程序.

如果我从中删除目录LD_LIBRARY_PATH,那么我会得到一个错误行,例如:

/usr/bin/ld: cannot find -labc
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我从-L选项列表中删除目录,那么我会收到许多警告,例如:

/usr/bin/ld: warning: libabc.so, needed by /long/path/to/libs/libxyz.so,
    not found (try using -rpath or -rpath-link)
Run Code Online (Sandbox Code Playgroud)

然后还有更多错误,例如:

/long/path/to/libs/libdef.so: undefined reference to `Foo::Bar<Baz>::junk(Fred*)'
Run Code Online (Sandbox Code Playgroud)

有人可以解释之间的差异LD_LIBRARY_PATH-L?我想深入了解这些内容,所以非常感谢参考!

另外,我必须添加什么来链接线以避免使用LD_LIBRARY_PATH

编辑:当缺少目录时-L,编译器建议"尝试使用-rpath或-rpath-link".我不认为我以前见过makefile中的那些选项.你呢?不确定这是否有助于解决这个LD_LIBRARY_PATH问题.

linux linker gcc shared-libraries

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

有没有人真正使用流提取操作符?

我写了很多operator<<(std::ostream &, const T &)函数 - 它们非常有用.

我从来没有operator>>(std::istream &, T &)在实际代码中编写函数,甚至没有使用内置类型的提取运算符(好吧,也许是std::string).这些仅适用于简短的示例程序和教科书吗?是operator>>C++的失败功能吗?

有人提出有关安全地重载流操作符的问题.我想知道是否有人在实践中这样做.

即使对于像C++文件中读取输入这样的简单内容我也无法建议使用operator>>.编写在检测和处理输入错误(或者我不知道如何)中的健壮代码是非常困难的.

如果您不同意,请展示一个使用的好例子operator>>- 也许通过回答我链接到的最后一个问题.


总结:感谢大家的回复,很多好的意见.曼努埃尔的回答让我重新考虑我不愿意使用,op>>所以我接受了那个.

c++ iostream formatted-input

21
推荐指数
2
解决办法
7292
查看次数

如何让Subversion使用第三方差异工具?

我需要的不仅仅是默认差异!我最近购买了"Beyond Compare",我想将它与svn集成,所以当我输入时它会启动:

svn diff foo.c

我该怎么做呢?

linux svn diff beyondcompare

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

为什么我不能在类声明中放入"using"声明?

我理解当你using在头文件中放入一个声明时可以遇到的麻烦,所以我不想这样做.相反,我试图将using(或a namespace foo =)放在类声明中,以减少头文件中的重复输入.不幸的是我遇到编译错误.似乎它将是一个有用的功能.

#ifndef FOO_H
#define FOO_H

// This include defines types in namespace gee::whiz::abc::def,
// such as the class Hello.
#include "file_from_another_namespace.h"

// using namespace gee::whiz::abc::def; // BAD!

namespace x {
   namespace y {
      namespace z {

struct Foo {
    using namespace gee::whiz::abc::def; // Illegal.
    namespace other = gee::whiz::abc::def; // Illegal.

    // Foo(gee::whiz::abc::def::Hello &hello); // annoyingly long-winded

    Foo(other::Hello &hello); // better
    //...
};

} } } // end x::y::z namespace

#endif // FOO_H …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces using compiler-errors header

18
推荐指数
1
解决办法
8223
查看次数

使用已检查的STL实现,任何可用的免费服务?

  1. 您是否使用过检查过的STL实现?
  2. 它找到了你没想到的错误吗?
  3. 有没有我可以在Linux上免费试用?

c++ linux stl

10
推荐指数
1
解决办法
2511
查看次数

使用常规迭代器向后迭代,还是使用reverse_iterator?

我最近了解了在C++中使用反向迭代器的正确方法(特别是当你需要擦除它时).(见这个问题,并且这一个.)

这就是你应该这样做的方式:

typedef std::vector<int> IV;
for (IV::reverse_iterator rit = iv.rbegin(), rend = iv.rend();
     rit != rend; ++rit)
{
  // Use 'rit' if a reverse_iterator is good enough, e.g.,
  *rit += 10;
  // Use (rit + 1).base() if you need a regular iterator e.g.,
  iv.erase((rit + 1).base());
}
Run Code Online (Sandbox Code Playgroud)

但我认为这样做要好得多(不要这样做,不符合标准,正如MooingDuck指出的那样):

for (IV::iterator it = iv.end(), begin = iv.begin();
     it-- != begin; )
{
  // Use 'it' for anything you want
  *it += 10;
  iv.erase(it); …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stl

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