web-dev-qa-db-ja.com

viで制御文字(^ @、^ M、^ I ....)を検索して置換する

この行をubuntuマシンの/proc/some_proc_id/cmdlineからコピーしました。

Java^@-jar^@/usr/lib/Selenium/selenium-server-standalone.jar^@-port^@4444^@-trustAllSSLCertificates^@

どういうわけか、スペース文字はviでは^@で表されます。コマンドを使用してスペース文字で置き換えようとしましたが、

:%s#^@# #g

しかし、それはpattern not found ^@です。

特殊文字、特にカラット記号で始まる特殊文字をどのように置き換えることができますか?

14
user93868

どういうわけか、スペース文字はviでは^@で表されます。

それをしたのはviではありません。シェルの間に引数の間にスペースを入れてコマンドラインを入力しますが、コマンドラインは実際には内部で文字列の個別のシーケンスであり、1つの長いスペースで区切られた文字列ではありません。シェルは、コマンドが起動される前にコマンドラインを個々の引数文字列に分割しました。

Cでは、文字列はNUL文字で終了し、^@として表示されます。

特殊文字、特にカラット記号で始まる特殊文字をどのように置き換えることができますか?

これらの文字を入力するには、それらの前に Control-v リテラルの次の文字。

この場合の例: Control-v に続く Control-@

次のリテラル文字を導入する特殊文字は通常 Control-v しかし、実際には構成可能です。 stty -aと入力して、設定値を確認します。出力でlnextを探します。

15
Celada

そのsymbolは、ASCII value 000。

あなたは試すことができます:

:%s/\%x00/ /g

代替:

@記号が上にあるキーボード 2 キー(Celadaに感謝)

  • %s/<CTRL-2>/ /g(PC上)

  • %s/<CTRL-SHIFT-2>/ /g(Macの場合)

ここで、<CTRL-2>は、最初に CTRL PCでは、押したままにして、 2、リリース CTRL

<CTRL-SHIFT-2>は、最初に control Macでは、押したままにします。 shift Macでは、押したままにして、 2、リリース control そして shift

最後に、2つのコマンドの両方で画面に%s/^@/ /gが表示されます。 ^@は単一の文字を意味し、^の後に@を続けたものではないため、上記のコマンドの行に^@を入力することはできません。

このコマンドは、すべての^@をスペース文字に置き換えます。

ソース

4
erik

sed 's/\ r //'入力>出力

ここにリンクの説明を入力

0
jim