为什么输出重定向不写入文件?

时间:2015-03-17 14:24:45

标签: bash sed

我在名为columns的文件中包含以下内容:

  SCHEMA_123 | user                      | id
  SCHEMA_123 | user                      | name
  SCHEMA_123 | user                      | role

我运行以下内容并获得我在stdout中寻找的内容:

cat columns | sed 's/ //g' | sed 's/|/./g'

输出:

SCHEMA_123.user.id
SCHEMA_123.user.name
SCHEMA_123.user.role

我尝试将输出重定向到具有相同文件名(列)的文件,但文件最终为空。这是我正在使用的:

cat columns | sed 's/ //g' | sed 's/|/./g' > columns

如果我使用不同的文件名,我会得到我想要的输出。我无法读取文件,修改文件并将其写回相同的文件名吗?

1 个答案:

答案 0 :(得分:1)

您无法读取和写入同一文件,因为即使在执行命令行之前,shell也会将输出文件截断为零字节。

使用sed中的内嵌修改选项:

sed -i.bak 's/ //g; s/|/./g' columns