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