명령줄 출력 앞에 고정 문자열을 붙이는 방법은 무엇입니까? [복사]

명령줄 출력 앞에 고정 문자열을 붙이는 방법은 무엇입니까? [복사]

다음 명령을 실행한다고 가정해 보겠습니다.

sudo ./list_members Physicians 

다음과 같이 출력에 접두사를 추가하고 싶습니다.

Physicians [email protected]
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]

StdOutput 앞에 이런 접두어를 붙일 수 있나요?

답변1

tsmoreutils 패키지의 유틸리티를 사용하는 것이 좋습니다 . 주요 목적은 출력 줄 앞에 타임스탬프를 추가하는 것이지만 타임스탬프 대신 임의의 문자열을 사용할 수도 있습니다.

for line in {01..05}; do echo $line; done | ts  "A string in front "
A string in front  01
A string in front  02
A string in front  03
A string in front  04
A string in front  05

답변2

사용에스트레메편집하다이토:

sudo ./list_members Physicians | sed 's/^/Physicians /'

도우미 기능으로 만들려면 다음을 awk 선호할 수 있습니다.

prefix() { P="$*" awk '{print ENVIRON["P"] $0}'; }

sudo ./list_members Physicians | prefix 'Physicians '

stdout 및 stderr에 접두사를 추가하려면 다음 방법으로 수행할 수 있습니다.

{
  sudo ./list_members Physicians 2>&1 >&3 3>&- |
   prefix 'Physicians ' >&2 3>&-
} 3>&1 | prefix 'Physicians '

답변3

다음을 사용하여 이 작업을 수행할 수도 있습니다 awk.

$ sudo ./list_members | awk '{print "Physicians "$0}'
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]
Physicians [email protected]

또는 다음을 사용하여 xargs:

$ sudo ./list_members | xargs -n1  echo 'Physician'

./list_members2개 이상의 매개변수를 포함할 예정 이라면 이를 사용하여 xargs입력을 분할 할 수 있습니다 \n.

$ sudo ./list_members | xargs -n1 -d $'\n' echo 'Physician'
Physician [email protected] xxx
Physician [email protected] yyy
Physician [email protected] zzz
Physician [email protected] aaa

답변4

Bourne 쉘(또는 상위 세트인 BASH)을 사용하면 솔루션이 100% POSIX로 유지됩니다.

sudo ./list_members | while read LINE; do echo "Prefix ${LINE}"; done

관련 정보