重複した行のみを提供するためにシェルに貼り付けたいコピーリストがあります。
1
1
サム
2
bashコマンドを読んだとき、私は次のようにしました。
cat > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)
上記のコマンドを作成するときにリストを貼り付けてCTRL+Z
stop catを押すと、重複した行が表示されます。ファイルを比較したくなく、数行の入力だけを貼り付けてください。
今質問は:このコマンドをスクリプトに変換する方法はありますか?なぜならスクリプトで作ってCTRL+Z
止めようとする時です。
PS:笑わないでください。初めて試してみてください。今まで勉強を続けています。 :)
答え1
#!/bin/bash
while :
do
echo Paste some input, then press Control-D:
cat > /tmp/sortme ; diff <(sort /tmp/sortme) <(sort -u /tmp/sortme)
done
答え2
最初の問題は、標準設定でタスクがバックグラウンドで実行されないように一時停止するControl Zです。終了するとこれがわかります。これはジョブが停止したことを示します。 (他のジョブ制御コマンドも可能です。)必要なのは、端末に入力したときにファイルの終わりを送信するコントロールDです。これはdosとwindowsとは非常に異なります。
第二に、スクリプトでcatを見ると、90%の場合には必要ありません。 catを使わずに好きなことをする3つの方法があります。
tee
tee /tmp/sortme | sort | diff - <(sort -u /tmp/sortme)
一時ファイルを名前付きリンクに置き換えることもできます。uniq -dを使う
sort | uniq -d
xclipを使用すると、コマンドラインからクリップボードにアクセスできるため、EOFを送信する必要はありません。また、前の 2 つのオプションと組み合わせて、4 行とも目的の操作を実行できます。
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