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
, \0123
1... 순서를 따르세요.
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"
어떤 경우 에라도
- 한 줄을 읽는 구문은 다음과 같습니다.
IFS= read -r line
, 아니요read line
- 매개변수 확장은 POSIX 쉘에서 인용되어야 합니다.
bash
. - 첫 번째 매개변수
printf
는 형식입니다. 여기에는 외부 데이터가 있어서는 안 됩니다.
1 이는 C의 일반적인 확장이 아닌 echo
8진수 시퀀스에 선행 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하거나, 반복적으로 분할할 수 있습니다.