목록에서 가져와 각 요소에 대해 (고유한) 명령을 실행하는 유틸리티

목록에서 가져와 각 요소에 대해 (고유한) 명령을 실행하는 유틸리티

표준 입력에서 목록을 읽고 명령을 내리는 유틸리티를 만들려고 합니다.

나는 다음 스크립트를 만들었습니다: (이름이 consume_list)

#!/bin/bash

set -euo pipefail

eval "hack() {  $@ ; }"

while read -r line
do
    hack "$line"
done < <(cat /dev/stdin)

이렇게 하면 명령을 래핑하고 스크립트 읽기 및 생성을 단순화할 수 있습니다.

나쁜 예는 다음과 같이 목록에서 bash 대체를 사용하는 것입니다(나에게는 sed, cut, tr 등보다 쉽습니다).

cat log.txt | grep 'error' | consume_list 'echo ${1:20:10}'

이것은 것이다

당신은 가지고 있습니까?올바른 도구이것을 달성하려면?

답변1

표준 입력(또는 다른 곳)의 일련의 줄에서 명령을 실행하는 "올바른" 도구는 다음과 같습니다.xargs:

grep error log.txt | xargs -r -d\\n -n 1 bash -c 'echo ${0:20:10}'

그러나 귀하의 예에서는 실제로 다음을 사용하는 것이 훨씬 좋습니다 cut.

grep error log.txt | cut -c21-30

관련 정보