구분 기호로 표준 출력을 분할하고 행을 무작위로 선택하시겠습니까?

구분 기호로 표준 출력을 분할하고 행을 무작위로 선택하시겠습니까?

명령 출력을 구분 기호(이 경우 새 줄)로 분할한 다음 무작위로 줄을 선택하려면 어떻게 해야 합니까?

내가하고 싶은 일의 예는 다음과 같습니다.

curl -s http://www.compciv.org/files/pages/nyt-sample/ | pup 'article p text{}' \
        | sed 's/^[ \r\n\t]*//'

출력:


The fine of $35 million in each of two civil penalties, for a total of $70 million, is a record for the National Highway Traffic Safety Administration.


After becoming a grandmaster at the tender age of 13, Sam Sevian is getting some help from the chess champion Garry Kasparov.


In a small stand against gentrification, the nonprofit Wildflowers Institute has helped San Francisco’s gritty Tenderloin neighborhood define its cultural assets.


The currency has fallen because investors fear that the eurozone is stuck in a quagmire and its leaders are not doing much to pull it out.


President Obama is facing opposition from his party to one of his top priorities: winning the power to negotiate international trade pacts and speed them through Congress.

개행 문자를 분할한 다음 하나만 선택하여 다음과 같은 결과를 얻으려면 어떻게 해야 합니까?

The currency has fallen because investors fear that the eurozone is stuck in a quagmire and its leaders are not doing much to pull it out.

답변1

간단한 대답은 명령을 shuf -n1.입력(행)을 임의의 순서로 변환하고 그 중 하나(즉, 무작위로 선택)를 출력합니다.

그러나 ( curl … | pup …) 명령은 빈 줄을 출력합니다. 나는 당신이 최종 출력에서 ​​빈 줄 중 하나를 얻고 싶지 않다고 생각합니다.  shuf 빈 줄을 무시하는 옵션은 없는 것 같습니다. 빈 줄을 보려면 먼저 제거해야 합니다  shuf. 일반적인 접근 방식은

컬 -s http://www.compciv.org/files/pages/nyt-sample/ pup 'article p text{}' \
        | sed 's/^[ \r\n\t]*//'| grep '.'    |슈프-n1

그러나 기존 명령줄은 이미 command 로 끝나므로 sed이를 활용할 수 있습니다.

컬 -s http://www.compciv.org/files/pages/nyt-sample/ pup 'article p text{}' \
        |sed -e 's/^[ \r\n\t]*//' -e '/^$/d'|슈프-n1

\n추신: 귀하의 웹사이트에 이를 포함시키는 것은 의미가 없습니다.sed s명령 - sed달리 지정하지 않는 한 한 번에 한 줄씩 입력을 처리하며, 줄은 절대로 처리하지 않습니다.포함하다 \n.

관련 정보