我经常在网上看到用不同符号连接各种命令的教程。例如:
command1 | command2
command1 & command2
command1 || command2
command1 && command2
Run Code Online (Sandbox Code Playgroud)
其他人似乎将命令连接到文件:
command1 > file1
command1 >> file1
Run Code Online (Sandbox Code Playgroud)
这些是什么?他们叫什么?他们在做什么?还有更多吗?
我有一个相当大的文件(35Gb),我想就地过滤这个文件(即我没有足够的磁盘空间来存放另一个文件),特别是我想 grep 并忽略一些模式 - 有没有办法在不使用其他文件的情况下执行此操作?
假设我想过滤掉所有包含foo:
例如...
问题是我希望在移动文件时能够看到错误,但看不到权限问题的错误。换句话说 - 我关心文件是否没有完全传输,但不想看到这样的错误:
mv:未能保留`/home/blah/backup/pgsql.tar.gz'的所有权:不允许操作
所以,我想是这样的:mv $backupfile $destination --ignore-permissions
。
备份文件可以是 1 MiB 到 5 GiB 的任何大小,并通过 NFS 传输。
我有几个文件大小 > 1 GB。我需要从文件中删除最后几个字节。我该怎么做?我更喜欢就地编辑文件以节省磁盘空间。
我在 HP-UX 上。
我正在尝试使用类似sed
或awk
执行以下操作编写过滤器:
这恰好适用于“git clean”过滤器,但这可能并不重要。重要的方面是这需要作为过滤器来实现,因为输入是在 stdin 上提供的。
我知道如何使用sed
删除模式的行,例如。1,/pattern/d
但是如果/pattern/
在任何地方都不匹配,则会删除整个输入。
我可以想象编写一个完整的 shell 脚本来创建一个临时文件,执行某个操作grep -q
或其他操作,然后决定如何处理输入。如果可能的话,我更愿意在不乱创建临时文件的情况下执行此操作。这需要高效,因为 git 可能会频繁调用它。