[bash] stdin과 문자열을 연결하는 방법은 무엇입니까?

stdin을 문자열에 연결하는 방법은 무엇입니까?

echo "input" | COMMAND "string"

그리고 얻다

inputstring



답변

A는 해키 비트, 그러나 이것은 당신이 질문 (수용 파이프를 사용에 무엇을 요구 할 수있는 가장 짧은 방법이 될 수도 stdout에서 echo "input"와 같은 stdin다른 프로세스 / 명령 :

echo "input" | awk '{print $1"string"}'

산출:

inputstring

정확히 어떤 작업을 수행하려고합니까? 더 많은 컨텍스트는 더 나은 솔루션에 대한 더 많은 방향을 얻을 수 있습니다.

업데이트-댓글에 응답 :

뿡 빵뀨

당신이 원하는 것을하는 더 관용적 인 방법은 다음과 같습니다 :

echo 'http://dx.doi.org/'"$(pbpaste)"

$(...)구문라고 명령 대체 . 간단히 말해, 새 서브 쉘에 포함 된 명령을 실행하고 stdout출력을 $(...)상위 쉘에서 호출 된 위치로 대체합니다 . 따라서 실제로 다음을 얻을 수 있습니다.

echo 'http://dx.doi.org/'"rsif.2012.0125"


답변

cat -stdin에서 읽는 데 사용 $()하고 후행 개행을 버리기 위해 넣으십시오.

echo input | COMMAND "$(cat -)string"

그러나 파이프를 버리고 명령 대체에서 왼쪽의 출력을 가져 오지 않는 이유는 무엇입니까?

COMMAND "$(echo input)string"


답변

나는 종종 파이프를 사용하기 때문에 이것은 stdin의 접두사와 접미사를 쉽게 접할 수있는 방법입니다.

echo -n "my standard in" | cat <(echo -n "prefix... ") - <(echo " ...suffix")
prefix... my standard in ...suffix


답변

sed로 할 수 있습니다.

seq 5 | sed '$a\6'
seq 5 | sed '$ s/.*/\0 6/'

귀하의 예에서 :

echo input | sed 's/.*/\0string/'


답변

이를 수행하는 몇 가지 방법이 있습니다. 개인적으로 가장 좋은 방법은 다음과 같습니다.

echo input | while read line; do echo $line string; done

또 다른 방법은 sed 명령에서 “$”(줄 끝 문자)를 “문자열”로 대체하는 것입니다.

echo input | sed "s/$/ string/g"

내가 전자를 선호하는 이유는 무엇입니까? 예를 들어 다음 명령을 사용하여 문자열을 stdin에 즉시 연결하기 때문입니다.

(echo input_one ;sleep 5; echo input_two ) | while read line; do echo $line string; done

즉시 첫 번째 출력을 얻습니다.

input_one string

5 초 후에 다른 에코가 나타납니다.

input_two string

반면에 “sed”를 사용하면 먼저 괄호의 모든 내용을 수행 한 다음 “sed”에 제공하므로 명령은

(echo input_one ;sleep 5; echo input_two ) | sed "s/$/ string/g"

두 줄을 모두 출력합니다.

input_one string
input_two string

5 초 후.

이는 완료하는 데 오랜 시간이 걸리는 함수 호출을 수행하고 함수 출력에 대해 지속적으로 업데이트하려는 경우에 매우 유용 할 수 있습니다.


답변

이것이 몇 년 늦었다는 것을 알고 있지만 xargs -J 옵션을 사용하면이 작업을 수행 할 수 있습니다.

echo "input" | xargs -J "%" echo "%" "string"

이 때문에 그리고 있다 xargs를을 한 번에 파일의 여러 줄에이 작업을 수행 할 수 있습니다. 파일 ‘names’에 다음과 같이 세 줄이있는 경우 :

Adam
Bob
Charlie

다음과 같이 할 수 있습니다.

cat names | xargs -n 1 -J "%" echo "I like" "%" "because he is nice"


답변

게시 한 명령은 “input”문자열을 COMMAND의 stdin 스트림으로 사용하므로 COMMAND가 먼저 stdin의 내용을 인쇄 한 다음 명령 줄 인수를 인쇄하지 않는 한 찾고있는 결과를 생성하지 않습니다.

당신이 원하는 것은 명령 대체에 더 가까운 것 같습니다.

http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html#Command-Substitution

명령 대체를 사용하면 다음과 같은 명령 줄을 사용할 수 있습니다.

echo input `COMMAND "string"`

이것은 먼저 “문자열”을 입력으로 사용하여 COMMAND를 평가 한 다음 해당 명령 실행 결과를 한 줄로 확장하여 ‘`’문자 사이에있는 내용을 대체합니다.