区切り文字の前のテキストを削除するにはどうすればいいですか?

区切り文字の前のテキストを削除するにはどうすればいいですか?

テキスト ファイルのすべての行で区切り文字の前後のテキストを削除する方法について助けが必要です。);例:|

 SUBSCIBER_MSISDN=6289666195060');BEGIN DBMS_LOCK.SLEEP(5); END-- rKSy|

そして結果はこうなるはずだった

SUBSCIBER_MSISDN=6289666195060|

その部分を削除する方法をご存知ですか? 大きなファイルです。

使わなければならないとしたら気が狂ってしまうでしょうsed

答え1

表示しているのが、何らかの入力ファイルからの完全な行であると仮定します。

sed "s/'.*/|/" file >newfile

'これにより、各行の最初の文字の後のすべてが文字に置き換えられます。結果はリダイレクトによって新しいファイルに書き込まれます。単一引用符で囲まれた文字列には単一引用符文字を含めることができないため、式|を二重引用符で囲んでいます。sed

サンプルデータを与えると、次のようになります

 SUBSCIBER_MSISDN=6289666195060|

さらに行の先頭から空白を削除したい場合 (例ではこれを実行しているようです):

sed -e "s/'.*/|/" -e 's/^[[:blank:]]*//' file >newfile

または、

sed "s/'.*/|/; s/^[[:blank:]]*//" file >newfile

に嫌悪感がある場合はsed、 を使用してまったくawk同じ変換を行うことができます。

awk '{ sub("'"'"'.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

奇妙に見えるのは'"'"'引用符で囲まれた一重引用符です。コードを構成する一重引用符で囲まれた文字列の外側では二重引用符で囲む必要がありますawk。 を使用することもできます'\''。つまり

awk '{ sub("'\''.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

または、一重引用符文字の 8 進 ASCII コードを使用することもできます。

awk '{ sub("\047.*", "|"); sub("^[[:blank:]]*", ""); print }' file >newfile

関連情報