我正在为目录中的每个文本文件运行awk命令。截至目前,它显示为stdout。我希望将这些更改保存到实际文件本身。我的命令是
awk{ORS=(/^\- **\ **/?"":RS)}1 *.txt >> *.txt
每次重定向命令时,它都会将所有内容保存到一个文件中。无论如何我可以将更改保存回文件本身吗?
答案 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