2017-05-29 35 views
0

私はsed appendで変数を使用しようとしています。"unterminated address regex" sedで変数を使用

予想通り、次のコマンド作品は:

sed -i "\:#file = /mnt/var/log/hadoop-yarn/containers/application_1495965866386_0001/container_1495965866386_0001_01_000002/stderr:a file = /path/to/other/file" /etc/conf/service.conf 

私はエラーを打ってる変数とパターン置き換えただし場合:

$ echo $item 
#file = /mnt/var/log/hadoop-yarn/containers/application_1495965866386_0001/container_1495965866386_0001_01_000002/stdout 

$ sed -i "\:$item:a file = /path/to/other/file" /etc/conf/service.conf 
sed: -e expression #1, char 122: unterminated address regex 

詳細はEDIT:だから「アイテムを'変数は配列から取り込まれています。

$item="#file = /mnt/var/log/hadoop-yarn/containers/application_1495965866386_0001/container_1495965866386_0001_01_000002/stdout" 
$sed -i "\:$item:a file = /path/to/other/file" /etc/conf/service.conf 
$ 

とても奇妙な何かをして起こっているようだ:私は手動で「アイテム」を取り込む場合、それはその後、例えば作品見つけたしかし

$readarray LINES < <(grep "#file = /mnt/var/" /etc/conf/service.conf) 
$item=${LINES[1]} 

$echo $item 
#file = /mnt/var/log/hadoop-yarn/containers/application_1495965866386_0001/container_1495965866386_0001_01_000002/stdout 

:その配列はreadarrayとgrepから作成されますreadarray/grep

+0

私はうまく動作します。 –

+0

私にとってもうまく働いた。 – Jack

+0

'-i'を削除するか、' -i.bak'に変更すると動作しますか? –

答えて

0

ここでの問題は、grepの一部として引き込まれていた改行文字であることが判明しました。 これは、$ itemを手動で入力した理由です。 '\ n'はありません。

正しい方向に私を指してくれたEd Mortonに感謝します。

echo "$item" | cat -v 

は何も表示されませんでしたが、私は改行文字をトリミングするreadarrayコマンドに「-t」を追加しました:

$readarray -t LINES < <(grep "#file = /mnt/var/" /etc/conf/service.conf) 

を期待通りに物事が働いていたことを後に。

関連する問題