중복된 줄만 제공하기 위해 셸에 붙여넣고 싶은 복사된 목록이 있습니다.
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을 사용하지 않고 원하는 작업을 수행하는 세 가지 방법이 있습니다.
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