即使使用 'd' 标志,sed 也不会删除行

sed not deleting the lines even with the 'd' flag

我正在尝试从一个 csv 文件中删除所有的复制品:

awk -F ',' '{print }' file.csv | sort | uniq -d | xargs -I{} zsh -c "ggrep -n {} file.csv | tail +2 | awk -F':' '{print $1}' | xargs -I% gsed '%d' file.csv"

我正在使用 d 标志删除行,但它只是将所有行打印到 STDOUT。可能是什么原因造成的?

由于你使用的是 Zsh,如果你想消除文件中的重复行,你可以这样做:

print -l ${(fu)"$( < file.csv )"} > file.csv
  • < ... 输出文件内容。
  • $( ... ) 将输出捕获到一个字符串中。
  • "$( ... ) 确保保留换行符。
  • ${(f)...} 在换行处拆分字符串并将其转换为数组。
  • ${(u)...} 删除数组中的重复项。
  • print -l 在单独的行上打印数组中的每个条目。
  • > file.csv 将输出重定向回文件。

Zsh 手册中的更多信息: