명령 출력을 변수에 할당하면 새 줄이 공백으로 대체됩니다.

명령 출력을 변수에 할당하면 새 줄이 공백으로 대체됩니다.

파일이 있는데 패턴("생성 모드")에 따라 콘텐츠를 grep하고 이 콘텐츠를 bash 변수에 저장하여 컬 문에서 사용하는 것이 아이디어입니다. 명령이 작동하지만 문제는 출력이 변수에 할당될 때 새 줄이 공백으로 대체된다는 것입니다.

파일의 예

...
example1
example2
 create mode 100644 repo/linux-image-5.4.0-89-generic_5.4.0-89.100_amd64.deb
 create mode 100644 repo/linux-modules-5.4.0-89-generic_5.4.0-89.100_amd64.deb
 create mode 100644 repo/python3.8-minimal_3.8.10-0ubuntu1~20.04.1_amd64.deb
 create mode 100644 repo/python3.8_3.8.10-0ubuntu1~20.04.1_amd64.deb
example3
example4
...

그랩해야 해오직우분투 패키지를 bash 변수에 저장합니다 var. 아이디어는 형식을 유지하는 것입니다 \n.

나는 grep, sed를 사용하고 printf로 출력을 수정하고 출력을 변수에 할당해 보았습니다.

사용 예grep and printf

test_variable=$( cat file.txt | grep "create mode" )
var=$( printf '%s\n' "${test_variable//' create mode 100644 repo/'/}" )
echo $var
repo/linux-image-5.4.0-89-generic_5.4.0-89.100_amd64.deb repo/linux-modules-5.4.0-89-generic_5.4.0-89.100_amd64.deb repo/python3.8-minimal_3.8.10-0ubuntu1~20.04.1_amd64.deb repo/python3.8_3.8.10-0ubuntu1~20.04.1_amd64.deb

동일한 printf 명령을 사용했지만 출력을 변수에 할당하지 않은 경우 결과는 다음과 같습니다.

linux-image-5.4.0-89-generic_5.4.0-89.100_amd64.deb
linux-modules-5.4.0-89-generic_5.4.0-89.100_amd64.deb
python3.8-minimal_3.8.10-0ubuntu1~20.04.1_amd64.deb
python3.8_3.8.10-0ubuntu1~20.04.1_amd64.deb

이 문제를 해결하기 위해 다른 제품을 사용해 보았습니다 tr.

사용하는 다른 예sed

sed -e '/create mode/!d' file.txt
 create mode 100644 repo/linux-image-5.4.0-89-generic_5.4.0-89.100_amd64.deb
 create mode 100644 repo/linux-modules-5.4.0-89-generic_5.4.0-89.100_amd64.deb
 create mode 100644 repo/python3.8-minimal_3.8.10-0ubuntu1~20.04.1_amd64.deb
 create mode 100644 repo/python3.8_3.8.10-0ubuntu1~20.04.1_amd64.deb

괜찮습니다. 하지만 이 출력을 변수에 할당하려고 하면 개행 문자가 공백으로 대체되었습니다.

var=$( sed -e '/create mode/!d' file.txt )
echo $var
create mode 100644 repo/linux-image-5.4.0-89-generic_5.4.0-89.100_amd64.deb create mode 100644 repo/linux-modules-5.4.0-89-generic_5.4.0-89.100_amd64.deb create mode 100644 repo/python3.8-minimal_3.8.10-0ubuntu1~20.04.1_amd64.deb create mode 100644 repo/python3.8_3.8.10-0ubuntu1~20.04.1_amd64.deb

이것 좀 도와주실 수 있나요? 감사해요

답변1

사용하면 echo "$var"잘 작동합니다.

$ valor=$( cat <<EOF
> hola
> adios
> EOF
> )
$ echo $valor
hola adios
$ echo "$valor"
hola
adios
$

관련 정보