2016-06-27 3 views
-1

UNIX(viまたはsed)でsubstituteコマンドを使用して次の結果を得る方法。私のデータは、例えばchar(10) null, char(20) null, char(11) not nullのようなものです。私はchar()nullがあり、char()not nullではない行を修正したいと思います。変更された行はvarchar(10) nullのようになります。
全体的なアイデアはvar charに置き換えられ、バイトは変更されずに残り、nullパラメータのみで置き換えられます。UNIX(viまたはsed)でsubstituteコマンドを使用して次の結果を得る方法

は、それは完璧な作りのため-iオプションを使用せずに、あなたに

+0

、 1出現 – Lawrence

+0

コマンドの最後に 'c'フラグがあることに注意してください。これにより、各置換の前にvi/mプロンプトが表示されます。詳細は ':help substitute'を参照してください。手動であるため、これには時間がかかります。編集:それはあなたのコメントを削除したようですが、私はこれに関係なく明確にするために残します – Lawrence

答えて

0

テストは、次のコマンドをありがとうございました。
\(\)の間の正規表現は記憶され、\1に返されます。正規表現の一致を%s/CHAR/VARCHAR/GC 2.試してみてください - あなたは手動で vimのインタラクティブな検索をアクティブにし、交換し、決めることができました、あなたのデータがすでにあるどれだけフォーマットさに応じて、

sed -i 's/char(\([0-9]*\)) not null/varchar(\1) not null/' file 
+0

素晴らしい。 私はsed 's/\(char ..... null \)/ var \ 1/g'を使用し、各バイト長の増加につき1つのドット( "。")を増やしました。あなたのソリューションは1回の実行です。再度、感謝します 。 – avi

0

のsed -i "S/CHAR/VARCHAR /" ファイル名.txt

+0

私は2つのシナリオまたは2種類の行があります私の質問をrepharseさせてください。 1)abc char(10)null。 2)xyz char(10)はnullではありません。 nullをパラメータとして持つ行(行1)を変更する必要があります。ソリューションに従えば、文字列 'char'ですべての行が変更されますが、 'char'と 'null' 'ブラケットのバイトサイズも変わるので、char(11)、char(5)などがあるので、' char(10) 'を使うことはできません。 私の質問が明確になることを願っています – avi

関連する問題