行から文字列を削除する方法

行から文字列を削除する方法

私はユーザーリストを含むプロパティファイルを操作しています。

[email protected],[email protected]
[email protected],[email protected]
[email protected]
[email protected]
[email protected]

今すぐ削除したい場合[Eメール保護]AdminListでのみ可能です。 Linuxでsedまたはawkを使用してこれをどのように実行できますか? Linux初心者ですが、助けてください

編集:全体の価値部分を削除したくありません。特定の文字列だけを削除したいです。たとえば、私のファイルが次のような場合:

[email protected],[email protected]
[email protected],[email protected]
[email protected]
[email protected],[email protected],[email protected],[email protected]
[email protected]

この場合は、単に取り除きたいです。[Eメール保護]管理者リストから

ベストアンサー1

ケース1:完全な「値」部分の削除

ファイルに「単純な」key=value文だけが含まれているとします。つまり、「値」部分には以下が含まれています。いいえ =sed次のように使用できるフラグ:

sed '/^AdminList/s/=.*$/=/' propertyfile.txt

例の出力は次のとおりです。

[email protected],[email protected]
[email protected],[email protected]
[email protected]
AdminList=
[email protected]

ここでのアイデアは、sコマンドで で構成された式を変えて、=そのあとに.*行末まで(記号)まで、望みの数の文字(部分)が続くようにすることです。ただし、 で始まるラインでのみ可能です。$=AdminList

ケース2:値リストから特定の値に対する消費税控除

カンマ区切りリストから1つの特定の値のみを削除するにはawk- ベースのアプローチをお勧めします。

awk '/^AdminList/ {sub(/[email protected],?/,""); print;next} {print}' propertyfile.txt

AdminListこれは、パターンで始まる行と一致し、空の文字列が[email protected]続く行を,置き換え、変更された行を印刷し、実行のために次の行にジャンプします。他のすべての行については、単に行全体を印刷します。

2番目の入力例を考えると、次のような結果が得られます。

[email protected],[email protected]
[email protected],[email protected]
[email protected]
[email protected],[email protected],[email protected]
[email protected]

選択した構文はかなり移植性が必要です。 GNU AwkとMawkを使ってテストしました。

おすすめ記事