Bash
如何使用提示將 Diff 命令轉換為 bash 腳本
我有一個我已經複製的列表,我想將它粘貼到 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 的情況下做你想做的事情,這讓我想到了:
- tee
tee /tmp/sortme | sort | diff - <(sort -u /tmp/sortme)
您還可以用命名連結替換臨時文件。- 使用 uniq -d
sort | uniq -d
- 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