使用awk从目录重定向文件

时间:2016-08-19 15:36:59

标签: awk

我正在为目录中的每个文本文件运行awk命令。截至目前,它显示为stdout。我希望将这些更改保存到实际文件本身。我的命令是

awk{ORS=(/^\- **\ **/?"":RS)}1 *.txt >> *.txt

每次重定向命令时,它都会将所有内容保存到一个文件中。无论如何我可以将更改保存回文件本身吗?

1 个答案:

答案 0 :(得分:0)

-和空格不是括号表达式之外的regexp元字符,因此无需在正则表达式中转义它们。您确实需要将脚本包含在单引号分隔符中。这将执行您的脚本显然正在尝试执行的操作:

awk '{ORS=(/^-  ** **/?"":RS)}1'

您无法写入正在阅读的同一文件。如果您尝试使用任何命令(awk,sed,grep等)执行此操作:

command file > file

然后shell可以做任何他喜欢的事情,包括在> file之前执行command file,然后在命令打开之前清空文件。

用GNU awk 4. *覆盖输入文件将是:

awk -i inplace '{ORS=(/^-  ** **/?"":RS)}1' *.txt

和其他问题一样,你需要这样的东西:

for file in *.txt; do
    awk '{ORS=(/^-  ** **/?"":RS)}1' "$file" > tmp && mv tmp "$file"
done