sed の終了していない `s' コマンド

sed の終了していない `s' コマンド

私が得ているのは:

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 を使用しているときに、テキストがウィンドウの終わりに近づいているときに / を入力すると、テキストが新しい行に配置されます。奇妙です。単語の折り返しのように動作しますが、実際にはすべてが壊れます。

その新しい行は、アップロード元の場所には存在しません。

ふぅぅぅぅぅぅぅ

関連情報