サンプルファイルの内容:
--------------------
NETWORKING=yes
HOSTNAME=wls1.ebs-testsrvrs.com
# oracle-rdbms-server-12cR1-preinstall : Add NOZEROCONF=yes
NOZEROCONF=yes
--------------------
「HOST」で始まるすべての行をコメントアウトしたいです。
答え1
存在するvi
:
:%s/^HOST/#&/
または
:g/^HOST/s//#&/
最初のコマンドは%
「フルバッファから」を意味し、縮小は最初の行1,$
から最後の行までを意味します。&
置換セクションの置換内容は、^HOST
パターン()に一致する全文で置き換えられます。
2番目のコマンドは、s///
セルフエディタを継承したグローバル()コマンドを使用して、一致したすべての行に置換()を適用します。 2番目のケースでは、コマンドは空の正規表現を使用します。これにより、コマンドで最近使用した正規表現を再利用できます。置換は最初のコマンドと同じです。^HOST
g
vi
ed
s///
^HOST
g
そしてsed
:
sed 's/^HOST/#&/' input >output
または
sed '/^HOST/s//#&/' input >output
vi
in(常に入力ストリームのすべての行にすべてのコマンドを適用するため、このようなものを明示的sed
には使用しません)と同じ方法です。%
g
sed
到着削除する次に始まる行のコメント文字#HOST
:
sed 's/^#HOST/HOST/' input >output
または
sed '/^#HOST/s/.//' input >output
上記の2つのコマンドのうち、2番目のコマンドは、で始まるすべての行s///
にコマンドが適用されます#HOST
。このs///
コマンドは行の最初の文字のみを削除します。
vi
これら2つのコマンドに対応するコマンドは次のとおりです。
:%s/^#HOST/HOST/
そして
:g/^#HOST/s/.//
それぞれ
答え2
オプションと一緒にsedを使用して-i
ファイルを所定の位置に編集します。 (元のバックアップコピーがとして保存されますfile.txt.bak
。)
sed -i.bak 's/^\(HOST.*\)/#\1/g' file.txt
正規表現部分をお読みください:^
行の先頭に一致します。
()
一致するテキストを一時的な内部変数()として取得します\1
。
\
文字の前に必要です。(
そうしないと、シェルが文字を盗むからです。
.*
0個以上の文字と一致します。
したがって、行の先頭から始まり、HOST
文字列と改行文字までのテキストが一致します。行が一致しない場合はそのままにしてください。一致するものがある場合はが#\1
印刷され、#
その後にテキストが表示されます()
。
答え3
Perl 1ライナー:
perl -pe 's/^HOST/#$&/' file
または、その場所でファイルを編集します。
perl -i -pe 's/^HOST/#$&/' file
説明する
-pe
方法血与えられたスクリプトを適用した後、各入力行を印刷します-e
。各行のs/foo/bar/
最初のインスタンスを置き換える代替演算子です。ここでは、(行の先頭を表す)で始まる行をaと一致する内容(一致する内容を格納する特殊変数)に置き換えます。だから私たちはに置き換えます。foo
bar
HOST
^
#
$&
HOST
#HOST
答え4
パール1行:
$ perl -ne 'if(/^HOST/){print "#$_"} else { print}' input.txt
--------------------
NETWORKING=yes
#HOSTNAME=wls1.ebs-testsrvrs.com
# oracle-rdbms-server-12cR1-preinstall : Add NOZEROCONF=yes
NOZEROCONF=yes
--------------------
この単純な1行の行はすべての行を通過し、行が次から始めて追加されることを確認HOST
します。それ以外の場合は、ステートメント#
に移動して変更されていない行のみを印刷します。else
同じ内容のPythonバージョンは次のとおりです。
python -c "import sys;print '\n'.join([ '#' + l.strip() if l.startswith('HOST') else l.strip() for l in sys.stdin ])" < input.txt
ただし、行のリスト(または配列)を作成し、条件に応じて行自体または追加の行を挿入する方法で、若干異なる動作をします#
。結局、配列は1つの大きな文字列に連結され、項目は改行で区切られて印刷されます。