linux - 在没有临时(中间)文件的情况下处理同一文件

标签 linux bash awk sed

我正在使用 awk 对文件进行一些文本处理。例如删除尾随空格。

awk '{gsub(/ +$/, "")} {print $0}' filename

这很好用。但是当我将输出重定向到原始文件时。它变成一个空文件。

temp$ awk '{gsub(/ +$/, "")} {print $0}' abc > abc
temp$ cat abc
temp$

所以我尝试了另一种方法。使用 cat 和管道而不是作为 awk 的输入参数。

temp$ cat abc | awk '{gsub(/ +$/, "")} {print $0}' abc > abc
temp$ cat abc
temp$ 

还是不行。有没有办法在不涉及中间文件的情况下实现相同的目标?

最佳答案

您可以使用sed -ised将为您处理

示例:

sed -i 's/[ \t]*$//g' file

关于linux - 在没有临时(中间)文件的情况下处理同一文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532123/

相关文章:

regex - 用于多个搜索的 sed 正则表达式语法

bash - 以 CSV 格式对每第 n 行命令输出进行分组

awk - 可以从哪里开始使用简单的 AWK 示例?

Python3.6 优于 Python 3.4

regex - 如何在 zgrep/zcat 命令中指定正则表达式?

linux - 填充 CSV 文件中的空格

linux - 在循环中执行命令的脚本

linux - 如何从任何源自其他 Bash 脚本的目录 Bash 脚本执行(不使用路径变量)

unix - 使用awk的最大值和最小值

shell - 带有正斜杠的 Sed 模式