
파일이 있는데 패턴("생성 모드")에 따라 콘텐츠를 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
$