programing

스테딘과 끈을 연결하는 방법은?

javamemo 2023. 5. 5. 08:32
반응형

스테딘과 끈을 연결하는 방법은?

stdin을 어떻게 문자열에 연결합니까?

echo "input" | COMMAND "string"

그리고 구함

inputstring

약간 진부하지만, 이것이 당신이 질문한 것을 할 수 있는 가장 짧은 방법일 수 있습니다(파이프를 사용하여 수락).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

이를 위한 몇 가지 방법이 있습니다. 개인적으로 가장 좋은 방법은 다음과 같습니다.

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

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

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초 후에

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

sed로 할 수 있습니다.

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

예를 들어, 다음과 같습니다.

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

몇 년 늦었지만 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"

또한 작동:

seq -w 0 100 | xargs -I {} echo "string "{}

다음과 같은 문자열을 생성합니다.

string 000
string 001
string 002
string 003
string 004

...

게시한 명령어는 문자열 "input"을 COMMAND의 stdin 스트림으로 사용하며, 이는 COMMAND가 먼저 stdin의 내용을 인쇄한 다음 명령줄 인수를 인쇄하지 않으면 원하는 결과를 생성하지 않습니다.

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

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

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

echo input `COMMAND "string"`

이렇게 하면 먼저 "string"을 입력으로 사용하여 COMMAND를 평가한 다음 해당 명령 실행 결과를 한 줄로 확장하여 '' 문자 사이의 내용을 대체합니다.

고양이는 내가 선택할 것입니다:ls | cat - <(echo new line)

펄 포함

echo "input" | perl -ne 'print "prefix $_"' 

출력:

prefix input

sd(기본적으로 현대식)를 사용하는 솔루션sedIMO를 훨씬 쉽게 사용할 수 있음):

# replace '$' (end of string marker) with 'Ipsum'
# the `e` flag disables multi-line matching (treats all lines as one)
$ echo "Lorem" | sd --flags e '$' 'Ipsum'
Lorem
Ipsum#no new line here

은 그것을 도 있습니다.Ipsum는 새 줄에 에 "" " " " " " 가 .\n 이유는.이유는echo의 출력은 다음으로 끝납니다.\n그리고 당신은 말하지 않았습니다.sd새로운 것을 추가하기 위해\n.sd기술적으로 정확합니다. 왜냐하면 그것은 당신이 요청하는 것과 정확히 같기 때문입니다. 다른 것은 아무것도 없습니다.

그러나 이것은 사용자가 원하는 것이 아닐 수 있으므로 대신 다음 작업을 수행할 수 있습니다.

# replace '\n$' (new line, immediately followed by end of string) by 'Ipsum\n'
# don't forget to re-add the `\n` that you removed (if you want it)
$ echo "Lorem" | sd --flags e '\n$' 'Ipsum\n'
LoremIpsum

다중 줄 문자열이 있지만 각 줄의 끝에 추가하려는 경우:

$ ls
foo bar baz
$ ls | sd '\n' '/file\n'
bar/file
baz/file
foo/file

sql 스크립트를 실행하기 전에 "set" 문 앞에 추가하고 싶습니다.그래서 저는 "세트" 명령을 반향시킨 다음 고양이에게 파이프로 연결합니다.명령 cat에는 "-"로 표시된 STDIN과 내 sql 파일, cat에는 두 가지 매개 변수가 모두 하나의 출력에 결합됩니다.그런 다음 결과를 mysql 명령어로 전달하여 스크립트로 실행합니다.

echo "set @ZERO_PRODUCTS_DISPLAY='$ZERO_PRODUCTS_DISPLAY';" | cat - sql/test_parameter.sql | mysql

및 p.s. mysql에 된 비밀번호.my.cnf

언급URL : https://stackoverflow.com/questions/13884108/how-to-concatenate-stdin-and-a-string

반응형