0

シェルスクリプトの「sed」コマンドに問題があります。

次のスクリプトを使用して、3つの「ラベル」を他の2つのファイルからキャプチャした情報に置き換えます。

#!/bin/sh

VAR1=$(cat file1.sh | grep --max-count=1 DLC=)
VAR2=$(cat file1.sh | grep --max-count=1 PROPATH=)
VAR3=$(cat file2.sh | grep -e - )

sed 's|PATTERN1|'"$VAR1"'|' < Template.sh > temp1.sh
sed 's|PATTERN2|'"$VAR2"'|' < temp1.sh > temp2.sh
sed 's|PROGRESS_CONNECTION|'"$VAR3"'|' < temp2.sh > Final.sh

3つの変数の内容は(二重引用符なしで)次のような文字列であることに注意してください。

VAR1="DLC=/user/aaa/bbb;export DLC"
VAR2="PROPATH=/user/ccc/ddd;export PROPATH"
VAR3="-db docdb -trig triggers -H sona01 -S 19001 -N TCP -ld newyork 
      -db docadm -trig triggers -H sona01 -S 19002 -N TCP -ld docadm 
      -db dochelp -trig triggers -H sona01 -S 19003 -N TCP -ld dochelp 
      -yy 1920 -rereadnolock -T /tmp -c 30 -d mdy -Bt 350 -D 100 -mmax 8192 -nb 200 -s 160 -noshvarfix -inp 32000 
      -cpinternal utf-8 -cpstream utf-8 -cpcoll ICU-UCA"

このスクリプトを実行すると、temp1.shが正しく作成され、temp2.​​shが正しく作成されますが、Final.shが作成されず、sedエラーメッセージが表示されます。

sed: -e expression #1, char 91: unterminated `s' command

この時点では、何が問題を引き起こしているのかわかりません。

何か助けはありますか?

4

1 に答える 1

1

問題は、$VAR3変数に改行文字が含まれていることです。

$ echo "$VAR3"
-db docdb -trig triggers -H sona01 -S 19001 -N TCP -ld newyork 
      -db docadm -trig triggers -H sona01 -S 19002 -N TCP -ld docadm 
      -db dochelp -trig triggers -H sona01 -S 19003 -N TCP -ld dochelp 
      -yy 1920 -rereadnolock -T /tmp -c 30 -d mdy -Bt 350 -D 100 -mmax 8192 -nb 200 -s 160 -noshvarfix -inp 32000 
      -cpinternal utf-8 -cpstream utf-8 -cpcoll ICU-UCA

As///に改行を含めることはできません (前に がある場合を除く\)。tr -d '\n'解決策は、改行を次のように削除することです。

$ echo "$VAR3" | tr -d '\n'
-db docdb -trig triggers -H sona01 -S 19001 -N TCP -ld newyork       -db docadm -trig triggers -H sona01 -S 19002 -N TCP -ld docadm       -db dochelp -trig triggers -H sona01 -S 19003 -N TCP -ld dochelp       -yy 1920 -rereadnolock -T /tmp -c 30 -d mdy -Bt 350 -D 100 -mmax 8192 -nb 200 -s 160 -noshvarfix -inp 32000       -cpinternal utf-8 -cpstream utf-8 -cpcoll ICU-UCA

sedで使用します:

$ sed 's|PAT|'"$(echo $VAR3 | tr -d '\n')"'|' temp2.sh > Final.sh
于 2012-06-11T17:20:32.610 に答える