众所周知,像这样的命令:
cat filename | some_sed_command >filename
Run Code Online (Sandbox Code Playgroud)
擦除文件文件名,因为在命令之前执行的输出重定向会导致文件名被截断。
可以通过以下方式解决问题:
cat file | some_sed_command | tee file >/dev/null
Run Code Online (Sandbox Code Playgroud)
但我不确定这在任何情况下都有效:如果文件(和 sed 命令的结果)非常大,会发生什么?操作系统如何避免覆盖一些尚未读取的内容?我看到还有一个海绵命令在任何情况下都应该起作用:它比 tee 更“安全”吗?
我试图准确了解文件的 ctime 时间戳何时更改。在许多地方(例如,在此处接受的答案中)建议文件属性的任何更改也将更改 ctime。然而,这似乎不是真的,至少在我的 Ubuntu 12.04 上(是的,我知道,有点旧......):
cat file.txt > /dev/null
Run Code Online (Sandbox Code Playgroud)
更改 atime,因此它更改文件属性(在文件 inode 中),但不更改 ctime。
其他来源(例如,here和here)表明只有对文件属性的一些操作才会真正改变 ctime,但没有提供精确的列表。
我在哪里可以找到有关哪些操作更改 ctime 的精确参考?
*RE 开头的语义是什么?有记录(man 7 regex)它只匹配基本 RE *(即,它变成普通字符),但是扩展 RE 会发生什么?通过示例,它看起来与 '.*' 具有相同的语义,但我找不到任何来源。
prompt> echo "hello" | grep -E '*'
hello
prompt> echo "hello" | grep '*'
prompt>
Run Code Online (Sandbox Code Playgroud)