相关疑难解决方法(0)

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万
查看次数

有没有办法就地修改文件?

我有一个相当大的文件(35Gb),我想就地过滤这个文件(即我没有足够的磁盘空间来存放另一个文件),特别是我想 grep 并忽略一些模式 - 有没有办法在不使用其他文件的情况下执行此操作?

假设我想过滤掉所有包含foo:例如...

grep large-files text-processing

62
推荐指数
8
解决办法
2万
查看次数

如何在不保留权限的情况下移动文件

问题是我希望在移动文件时能够看到错误,但看不到权限问题的错误。换句话说 - 我关心文件是否没有完全传输,但不想看到这样的错误:

mv:未能保留`/home/blah/backup/pgsql.tar.gz'的所有权:不允许操作

所以,我想是这样的:mv $backupfile $destination --ignore-permissions

备份文件可以是 1 MiB 到 5 GiB 的任何大小,并通过 NFS 传输。

bash mv

57
推荐指数
2
解决办法
11万
查看次数

如何就地编辑大文件?

我有几个文件大小 > 1 GB。我需要从文件中删除最后几个字节。我该怎么做?我更喜欢就地编辑文件以节省磁盘空间。

我在 HP-UX 上。

editors large-files hp-ux files

18
推荐指数
4
解决办法
7964
查看次数

从文件中删除行直到模式,除非模式不存在

我正在尝试使用类似sedawk执行以下操作编写过滤器:

  • 如果输入中不存在给定模式,则将整个输入复制到输出
  • 如果输入中存在模式,则仅将第一次出现后的行复制到输出中

这恰好适用于“git clean”过滤器,但这可能并不重要。重要的方面是这需要作为过滤器来实现,因为输入是在 stdin 上提供的。

我知道如何使用sed删除模式的行,例如。1,/pattern/d但是如果/pattern/在任何地方都不匹配,则会删除整个输入。

我可以想象编写一个完整的 shell 脚本来创建一个临时文件,执行某个操作grep -q或其他操作,然后决定如何处理输入。如果可能的话,我更愿意在不乱创建临时文件的情况下执行此操作。这需要高效,因为 git 可能会频繁调用它。

sed awk text-processing filter

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