中かっこ拡張(ソート)でBashワイルドカードを使用するには?

中かっこ拡張(ソート)でBashワイルドカードを使用するには?

sort私はテキストファイルから重複した行を削除し、アルファベット順に並べ替えました。ファイルの上書き{,}コマンドから):

sort -u -o $HOME/Documents/notes/URLs.txt{,}

後でミックスに別のファイルを追加するにはどうすればよいですかURLs.txt?説明するために、他の3つを試してみましょう。

$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

すべての入力ファイルの接続を新しいファイルにソートします。

答え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

を使用すると、これらのファイルが次の条件を満たす場合にのみ処理されるようにglob修飾子をzsh追加できます。.定期的な文書。を使用すると、ループを追加して非正規ファイルをスキップbashできます。[[ -f $f && ! -L $f ]] || continue

関連情報