我用来sort
从文本文件中删除重复行,按字母顺序排序,覆盖文件({,}
在命令中):
sort -u -o $HOME/Documents/notes/URLs.txt{,}
之后如何添加其他文件到混合中URLs.txt
?再用另外三个来说明:
$HOME/Documents/notes/{URLs.txt,Android.txt,mpv.txt,firefox.txt}
答案1
sort
对所有输入进行排序。因此,只要我们向 提供多个文件参数sort
,我们就会对它们的串联进行排序。要单独对文件进行排序并使用输出重写每个文件,您必须调用单独的命令。
for f in URLs.txt Android.txt mpv.txt firefox.txt
do
sort -u -o "$HOME/Documents/notes/$f"{,}
done
而这个:
sort -u -o newfile "$HOME"/Documents/notes/*.txt
会将所有输入文件的串联排序到 newfile。
答案2
在 中zsh
,我会这样做:
for f (~/Documents/notes/(URLs|Android|mpv|firefox).txt(N)) sort -uo $f $f
(或者sort -uo $f{,}
如果你想打高尔夫球)。
等效bash
的看起来像:
(shopt -s extglob nullglob
for f in ~/Documents/notes/@(URLs|Android|mpv|firefox).txt; do
sort -uo "$f" "$f"
done
)
那些使用通配符而不是大括号扩展的人,因此只会处理那些URLs.txt
......firefox.txt
如果它们确实存在的话。
使用zsh
,您还可以添加.
glob 限定符,以便仅在这些文件满足以下条件时才处理这些文件:常规的文件。使用bash
,您可以添加[[ -f $f && ! -L $f ]] || continue
循环来跳过非常规文件。