
ファイルがあり、パターン (「作成モード」) に従ってコンテンツを grep し、このコンテンツを bash 変数に保存して、curl ステートメントで使用するというアイデアがあります。コマンドは動作していますが、問題は、出力が変数に割り当てられると、新しい行が空白に置き換えられることです。
ファイルの例
...
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
...
grepする必要があるのみUbuntuパッケージを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
$