タイムスタンプを削除するために VI で検索と置換を実行しようとしています。通常は S コマンドを使用して VI でこれを行いますが、VI コマンド自体の構造の一部であるコロンを削除する必要があることを VI に伝えるにはどうすればよいですか?
例: "xxxxx xxxxx 24:00:00 CDT"
試した
s:24:00:00 CDT::g
s:"24:00:00 CDT"::g
s:/:::g
任意の支援をいただければ幸いです。
ここでの問題はコロンに一致することではありませんが、vim は正規表現を区切るためにコロンを使用しなければならないことを教えられています。これは正しくありません。
awk/vi/perl/ruby (およびその他多数) では、任意の区切り文字を指定できます。この文字は、コマンド文字 (この場合は S) に続く文字です。たとえば、次のようになります。
s/hello/there/
s:hello:there:
s@hello@there@
区切り文字が異なるだけで、すべて同じ正規表現です。この柔軟性は、/ を頻繁に使用するが、正規表現で / に一致させる必要がある場合、次のように他の区切り文字に切り替えることができることを意味します。
sMhel/loMthereM
正規表現にテキストが含まれている場合、「M」は最良の選択ではないかもしれませんが、スタイルと実際に一致させるものによって異なります。
ブラケットを使用することもできます。単一の正規表現の場合は次のとおりです。
s[hello]
また
s(hello)
検索と置換のスタイルについては、使用できるs[hello][there]
か、場合によってはs[hello](there)
. しかし、ブラケットに関するこの最後の文は、私が以前に perl を使用したときの半分記憶された推測です。
通常、vi はコマンド文字に続く文字を区切り文字として使用します。
これを試して:
s!24:00:00 CDT!!g
私のバージョンの vi では、次のようにして行からコロンを削除できます。YMMV。
:s/://g
s/\d\+:\d\+:\d\+ CDT//g
私のために働く:
初期コンテンツ:
xxxxx xxxxx 24:00:00 CDT
コマンドの後:
xxxxx xxxxx
タイムスタンプのみに影響することを確認したい場合(そのまま、上記の正規表現は桁数> 1を変更します)、使用します
s/\d\d:\d\d:\d\d CDT//g
ここで、最後の g は、最初のパターンだけでなく、パターンのすべての出現を変更します。
リストに複数のタイムゾーンがある場合は、それらをグループ化します。
:s/\d\+:\d\+:\d\+^Y \(CDT\|UDT\)//g
好きな区切り文字を使用できるようにする必要があるため、実際にはコマンドの一部ではありません。
私はおそらく試してみます:-
%s/\d\{2}:\d{2}:\d{2}//g