
私はいくつかのテストを実行し、自分が定期的に使用することを思い出しました。
source
だから私がやっている多くのことに共通して使われるいくつかのファイルがあります。 「=」ペアの後のすべての項目を削除してテンプレートを作成しようとしますName=Value
。つまり、sedでファイルを編集し、次の代わり
Foo=Bar
に次のようにします。
Foo=
これを行うためにRegExpステートメントを生成しようとしましたが、それ以降の値のみを削除しましたが、複数ではなく単一に一致する値を=
生成できないようです(たとえば、一致が一致しません)。=
=
=====
これは、投稿することを決める前に私が得た最も遠い情報です。s/={1}.*/=/g
誰でも洞察力を提供できますか?=
これは私たちのチームがよく使用するコメント形式であり、読みやすくするためにデータ入力セクションを分割するために使用されるため、複数の項目を削除したくありません。
いくつかのテスト値: -
NameOfServer=Foo
`#`==========
`#` UserData
`#`==========
理想的には、最初の行の「= Foo」と一致させたいのですが、コメントアウトされた行の複数の「=」は削除しないことをお勧めします。
注:私はSed(v4.2)を使用します(関連性がある場合は、「パターンの検索と置換」のためにVimでSedを使用することもできます)。
答え1
[a-zA-Z_]
変数は、1文字の後に0個以上の文字が続く文字列です[a-zA-Z_0-9]
(POSIX / Cロケールで)。
aの直後にこれらの文字列を一致させ、=
残りの行を削除できます。
sed 's/\([a-zA-Z_][a-zA-Z_0-9]*=\).*/\1/' file
あなたのサンプルファイルでは、これが生成されます
NameOfServer=
`#`==========
`#` UserData
`#`==========
答え2
={1}.*
Same as は、=.*
等号の後に任意の数の文字が続くものと一致します。正規表現は通常「欲張り」なので、最も長い一致を探そうとします。等号文字列にこのパターンを使用すると、正規表現エンジンがその文字を意味するかどうかがわからないため、文字列全体と一致します。外の等号。
=[^=]*
等号の後に、等号を除くすべての文字が来るものと一致させるために使用されます。または、=[^=].*
等号の後に他の文字が続き、その後に何かが一致します。
または、変数の割り当てと行をより密接に一致させるには、次のようにします。
sed -Ee 's/^([a-zA-Z0-9_]+=).*/\1/'
変数の割り当てのように見えることを確認して削除します=
。変数名には英字、数字、下線のみを含めることができるとします。これを調整する必要があるかもしれません。