사용자 입력에서 줄바꿈을 캡처하는 방법

사용자 입력에서 줄바꿈을 캡처하는 방법

grep대신에 .like 에 표시할 사용자 입력으로 뭔가를 하고 싶습니다.

uin="first\nsecond\n"
printf $uin | grep d

어떤 출력이 second사용자에게 입력되기를 원합니까?

read uin

사용자는 이를 입력할 수 있습니다 . 그러면 위의 줄에서 "first\nsecond\n"변수를 사용할 수 있습니다 . grep또는 사용자가 first및 를 입력한 후 실제 반환값을 입력 할 수 있는 경우 second해당 내용이 채워지므로 \n그것도 작동합니다. 이는 cli에서 실행하는 것을 의미합니다. 감사해요.

답변1

다음을 수행할 수 있습니다.

echo>&2 "Please enter a multiline string, Ctrl-D, twice if not on an empty line to end:"
input=$(cat)
printf 'You entered: <%s>\n'

후행 줄 바꿈은 제거 되므로 $(...)줄 바꿈으로 끝나는 텍스트를 입력하는 데 사용할 수 없습니다.

두 줄을 읽으려면 두 번 호출하면 됩니다 read.

IFS= read -r first
IFS= read -r second
printf 'You entered: <%s\n%s>\n' "$first" "$second"

줄을 입력하고 확장하려면 \n, \a, \x45, \01231... 순서를 따르세요.

IFS= read -r line
expanded_line=$(printf %b "$line")
printf 'You entered: <%s>\n' "$expanded_line"

또는 후행 줄 바꿈을 제거하지 않으려면 bash/ zsh또는 최신 버전의 ksh93u+m을 사용하십시오.

IFS= read -r line
printf -v expanded_line %b "$line"
printf 'You entered: <%s>\n' "$expanded_line"

어떤 경우 에라도


1 이는 C의 일반적인 확장이 아닌 echo8진수 시퀀스에 선행 0()이 필요한 \0ooo확장 \ooo이며 의 형식 매개변수에서도 인식됩니다 printf.

답변2

bash 스크립트 한 줄이면 grep d충분합니다. 사용자가 ctrl-D를 입력하는 마지막 줄까지 표준 입력을 읽습니다.

아니면 cat스크립트를 넣으세요:

#! /usr/bin/env bash

PATTERN=${1:-d}
TMP=/tmp/user_input.txt

cat > ${TMP}

grep "${PATTERN}" ${TMP}

rm ${TMP}

그런 다음 입력을 정렬하거나, awk하거나, 반복적으로 분할할 수 있습니다.

관련 정보