linux - 是否可以覆盖您正在处理的文件?

标签 linux bash sed

我想知道您是否可以覆盖您正在使用 bash 处理的文件?我已经对单词进行了排序,并且正在循环播放它。当我找到我想要的词时,我使用 && 将它保存到 file2,我想使用 ||从 file1 中删除它,但在下一次迭代中我想使用文件的更新版本。

while read word; do
    [[string1==string2]] && echo something || delete word from file
    done < file1 > file2

我尝试使用|| sed -i -e 's/$word//g' file1 但它不起作用。它创建具有奇怪名称的文件并且不更新当前文件。 有什么想法吗?

最佳答案

除了一个一个地做之外,你可以批量做这些

grep -xvFf keys file > file_keys_removed

grep -xFf keys file > file_keys_only

或者使用 awk 一次性完成。

awk 'NR==FNR {a[$0]; next} 
             {f=FILENAME "_keys_" (($0 in a)?"only":"removed"); 
              print > f}' keys file

关于linux - 是否可以覆盖您正在处理的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47144038/

相关文章:

bash - 在 sed 中按模式排除行

bash - 如何使用 sed 有选择地替换一组三个字符

c++ - 在 Linux 中编译/链接多个 C++ 库

linux - 如何使用文件名中的通配符从chown递归中排除文件?

linux - 如何列出在拉取的 Docker 镜像上执行的所有命令?

c++将函数输出重定向到已编译的程序输入,反之亦然

regex - 如何在第一个大写字符之前创建一个以文件名的一部分命名的文件夹,并将相应的文件移动到新目录中

c++ - L1-cache缓存2KB数据时内存带宽崩溃的原因

bash - 使用 groovy,如何通过管道传输多个 shell 命令?

regex - 填充空间/制表符分隔,空列为0