根据某些搜索条件替换文件中的字符串是一项非常常见的任务。我怎样才能
foo用bar在当前目录下的所有文件?我经常在网上看到用不同符号连接各种命令的教程。例如:
command1 | command2
command1 & command2
command1 || command2
command1 && command2
Run Code Online (Sandbox Code Playgroud)
其他人似乎将命令连接到文件:
command1 > file1
command1 >> file1
Run Code Online (Sandbox Code Playgroud)
这些是什么?他们叫什么?他们在做什么?还有更多吗?
我想要一个将当前工作目录带到变量的脚本。需要目录的部分是这样的dir = pwd。它只是打印pwd如何将当前工作目录放入变量中?
我想用来scp上传文件,但有时目标目录可能不存在。
是否可以自动创建文件夹?如果是这样,如何?如果没有,我可以尝试什么替代方法?
目前我有一个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 并试图搜索它,但没有找到解决方案。
我有一个巨大的(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?那有意义吗?有没有更优雅的解决方案?
如果我使用cat -n text.txt自动编号行,那么我如何使用该命令仅显示某些编号的行。
当我输入时,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。使我的端口更改生效。
是否有官方的 POSIX、GNU 或其他指南来说明应该在何处打印进度报告和日志信息(例如“Doing foo; foo done”)?就个人而言,我倾向于将它们写入 stderr,这样我就可以重定向 stdout 并仅获取程序的实际输出。我最近被告知这不是一个好的做法,因为进度报告实际上并不是错误,只有错误消息应该打印到 stderr。
这两个职位都有意义,当然您可以根据您正在做的事情的细节选择一个或另一个,但我想知道是否有一个普遍接受的标准。我无法在 POSIX、GNU 编码标准或任何其他此类广泛接受的最佳实践列表中找到任何特定规则。
我们有一些类似的问题,但它们没有解决这个确切的问题:
何时在 shell 脚本中使用重定向到 stderr:接受的答案表明我倾向于做什么,将程序的最终输出保留在 stdout 上,并将其他任何内容保留在 stderr 上。然而,这只是作为用户的意见提出的,尽管有论据支持。
使用消息应该转到 stderr 还是 stdout?:这是特定于帮助消息的,但引用了 GNU 编码标准。这就是我正在寻找的东西,不仅限于帮助消息。
那么,对于进度报告和其他信息性消息(不是程序实际输出的一部分)应该在哪里打印,是否有任何官方规则?
我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关闭?