小编ter*_*don的帖子

如何替换文件中的字符串?

根据某些搜索条件替换文件中的字符串是一项非常常见的任务。我怎样才能

  • 替换字符串foobar在当前目录下的所有文件?
  • 对子目录递归执行相同的操作吗?
  • 仅当文件名匹配另一个字符串时才替换?
  • 仅当在特定上下文中找到字符串时才替换?
  • 替换字符串是否在某个行号上?
  • 用相同的替换替换多个字符串
  • 用不同的替换替换多个字符串

sed awk perl text-processing

879
推荐指数
8
解决办法
171万
查看次数

shell 的控制和重定向操作符是什么?

我经常在网上看到用不同符号连接各种命令的教程。例如:

command1 |  command2
command1 &  command2
command1 || command2    
command1 && command2
Run Code Online (Sandbox Code Playgroud)

其他人似乎将命令连接到文件:

command1  > file1
command1  >> file1
Run Code Online (Sandbox Code Playgroud)

这些是什么?他们叫什么?他们在做什么?还有更多吗?


关于这个问题的元线程。.

shell io-redirection control-flow

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

如何获取当前工作目录?

我想要一个将当前工作目录带到变量的脚本。需要目录的部分是这样的dir = pwd。它只是打印pwd如何将当前工作目录放入变量中?

shell scripting bash directory

256
推荐指数
4
解决办法
93万
查看次数

如果目录不存在,scp 可以创建目录吗?

我想用来scp上传文件,但有时目标目录可能不存在。

是否可以自动创建文件夹?如果是这样,如何?如果没有,我可以尝试什么替代方法?

scp

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

Bash - 如何在上一个完成后运行命令?

目前我有一个script.sh包含以下内容的文件:

#!/bin/bash
wget -q http://exemple.com/page1.php;
wget -q http://exemple.com/page2.php;
wget -q http://exemple.com/page3.php;
Run Code Online (Sandbox Code Playgroud)

我想一个一个执行命令,当前一个完成时。我是否以正确的方式做这件事?我以前从未使用过 Linux 并试图搜索它,但没有找到解决方案。

shell bash

136
推荐指数
2
解决办法
37万
查看次数

在一个巨大的 (70GB)、一行、文本文件中替换字符串

我有一个巨大的(70GB)一行文本文件,我想替换其中的一个字符串(令牌)。我想<unk>用另一个虚拟令牌(手套问题)替换令牌。

我试过sed

sed 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
Run Code Online (Sandbox Code Playgroud)

但输出文件corpus.txt.new有零字节!

我也尝试过使用 perl:

perl -pe 's/<unk>/<raw_unk>/g' < corpus.txt > corpus.txt.new
Run Code Online (Sandbox Code Playgroud)

但我遇到了内存不足错误。

对于较小的文件,上述两个命令都有效。

如何替换字符串是这样的文件? 是一个相关的问题,但没有一个答案对我有用。

编辑:如何将文件拆分为 10GB(或其他任何大小)的块并应用sed到其中的每一个然后将它们合并cat?那有意义吗?有没有更优雅的解决方案?

sed large-files text-processing

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

使用 Linux 的“cat”命令,如何仅按数字显示某些行

如果我使用cat -n text.txt自动编号行,那么我如何使用该命令仅显示某些编号的行。

text-processing cat

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

如何在 Ubuntu 上重新启动 SSH 守护进程?

当我输入时,service sshd restart我收到一个sshd: unrecognized service错误。

我确实有,在我用来设置 config.js/etc/ssh/的文件sshd_config中。我也可以将腻子放入 Ubuntu 盒子(它是远程的)。

当我输入时,/etc/init.d/sshd restart我得到No such file or directory

下面/usr/sbin/有一个 sshd 文件,但它是二进制的。

我的 sshd 有问题吗?我该怎么做才能解决这个问题?明确地说,我希望能够输入service sshd restart(就像所有在线教程所说的那样)能够重新启动我的 sshd。使我的端口更改生效。

ubuntu upstart services sshd

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

进度报告/日志信息是否属于 stderr 或 stdout?

是否有官方的 POSIX、GNU 或其他指南来说明应该在何处打印进度报告和日志信息(例如“Doing foo; foo done”)?就个人而言,我倾向于将它们写入 stderr,这样我就可以重定向 stdout 并仅获取程序的实际输出。我最近被告知这不是一个好的做法,因为进度报告实际上并不是错误,只有错误消息应该打印到 stderr。

这两个职位都有意义,当然您可以根据您正在做的事情的细节选择一个或另一个,但我想知道是否有一个普遍接受的标准。我无法在 POSIX、GNU 编码标准或任何其他此类广泛接受的最佳实践列表中找到任何特定规则。

我们有一些类似的问题,但它们没有解决这个确切的问题:

那么,对于进度报告和其他信息性消息(不是程序实际输出的一部分)应该在哪里打印,是否有任何官方规则?

standard gnu posix stdout stderr

96
推荐指数
4
解决办法
8453
查看次数

如何撤消`set -x`?

set -x在终端输入。

现在终端继续打印在我的输出顶部运行的最后一个命令,因此命令

~]$echo "this is what I see"
Run Code Online (Sandbox Code Playgroud)

返回

+ echo 'this is what I see'
this is what I see
Run Code Online (Sandbox Code Playgroud)

没有手册页set,我该如何set -x关闭?

shell

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