Bash

如何使用提示將 Diff 命令轉換為 bash 腳本

  • June 2, 2015

我有一個我已經複製的列表,我想將它粘貼到 shell 中,只給我重複的行。

1

1

3

2

當我讀到 bash 命令時,我做了這個:

cat > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)

當我編寫上述命令時,我粘貼我的列表並按下CTRL+Z停止 cat,它會向我顯示重複的行。我不想比較文件,只是粘貼了幾行的輸入。

現在問題來了:有沒有辦法將該命令轉換為腳本?因為當我嘗試將其作為腳本並CTRL+Z停止它時。

PS:請不要笑。這是我第一次嘗試。到現在只是讀書。:)

#!/bin/bash

while :
do
 echo Paste some input, then press Control-D:
 cat > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)
done

第一個問題是控制項 Z,在標准設置中,它暫停作業,使其在後台不執行。您會在退出時注意到這一點,這將告訴您您已停止工作。(其他作業控制命令也可能)您想要的是 Control D,它在終端上鍵入時會發送一個文件結尾。這與dos和windows有很大不同。

其次,當您在腳本中看到 cat 時,有 90% 的時間不需要它。有三種方法可以在不使用 cat 的情況下做你想做的事情,這讓我想到了:

  1. teetee /tmp/sortme | sort | diff - <(sort -u /tmp/sortme) 您還可以用命名連結替換臨時文件。
  2. 使用 uniq -dsort | uniq -d
  3. xclip 允許您從命令行訪問剪貼板,因此您不必發送 EOF。它也可以與前兩個選項結合使用,以便所有這四行都可以滿足您的需求。
xclip -o > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)
diff <(xclip -o|sort) <(xclip -o|sort -u)
xclip -o|tee  /tmp/sortme | sort | diff - <(sort -u /tmp/sortme)
xclip -o|sort | uniq -d

引用自:https://unix.stackexchange.com/questions/206323