私が得ているのは:
sed: -e expression #1, char 46: unterminated `s' command
このコードについて:
sed -i.bak -c 's|net.ipv4.ip_forward.*|net.ipv4.ip_forward = 1|' /etc/sysctl.conf
私のエディターでは、文字 46 が .* 特殊文字の間にあることが示されています。
私は CentOS 5 から 6.5 のマシンで作業しています。
区切り文字を変更しても、' の代わりに " を使用しても効果はなく、コードは -c を除けば Linux Mint 17.3 のターミナルで動作するようです。. または * を特殊文字として解釈していないのではないかと思います。
私は試した :
sed 's/net.ipv4.ip_forward.*/net.ipv4.ip_forward = 1/' /etc/sysctl.conf
10 分かかって何も起こらなかったので停止しました。Mint 17.3 で動作します。
答え1
問題は、私の編集者が愚かで、単語の折り返しだと思ったことでした。
私が
sed -i.bak -c 's|net.ipv4.ip_forward.*|net.ipv4.ip_forward = 1|' /etc/sysctl.conf
エディターでは、「/etc/sysctl.conf」がウィンドウの端に触れているため、次の行に一部が表示されていました。これは単なる単語の折り返しだと思っていましたが、違いました。Centos または nano は、ファイルをアップロードするか、コードをコピーすると、「/etc/sysctl.conf」を新しい行に配置する必要があると判断しました。新しい行を手動で削除すると、正常に動作します。
編集: nano を使用しているときに、テキストがウィンドウの終わりに近づいているときに / を入力すると、テキストが新しい行に配置されます。奇妙です。単語の折り返しのように動作しますが、実際にはすべてが壊れます。
その新しい行は、アップロード元の場所には存在しません。