2011-10-18 16 views
2

私はどのように私はGREPまたは他のツールを使用してLinuxでこれを達成することができますすべてのコメント"grep"を使ってファイルからコメントを削除するには?

-- Sql comment line 

を削除する必要があるSQLファイルを持っていますか?

よろしく、

+1

行の先頭から始まっていないコメントはどうなりますか? –

答えて

10

grepツールは、フィルタの意味を逆に-vオプションがあります。たとえば:

grep -v pax people 

paxが含まれていないことをあなたにpeopleファイル内のすべての行を提供します。

例です。コメントマーカーの前の空白のみでラインを取り除く

grep -v '^ *-- ' oldfile >newfile 

。あなたがsedのようなものを使用することをやってみたかった場合

select blah blah -- comment here. 

:それはしかしような行を変更しません

" --"からの任意の文字を削除し、それぞれの行を編集し
sed -e 's/ --.*$//' oldfile >newfile 

を行末。

あなたが(不自然)のようなリアル SQL文で文字列" --"を見つけることに注意する必要がある点に注意してください。

select ' -- ' | colm from blah blah blah 

あなたはこれらを持っている場合は、ANを使用して作成/オフ方がよいでしょう単純なテキスト修正ツールではなくSQL構文解析ツールです。


運転中sedのトランスクリプト:grepについては

pax$ echo ' 
...> this is a line with -- on it. 
...> this is not 
...> and -- this is again' | sed -e 's/ --.*$//' 

this is a line with 
this is not 
and 

sed -e "s/(--.*)//" sql.filename 
+0

+1:私の答えよりずっと徹底的に(今削除された)。 – Johnsyweb

+0

こんにちは、私はSEDコマンドをテストしましたが、 " - "を含む行を削除していません。 GREPコマンドは、ファイルの先頭からいくつかの行を削除するだけです。 –

+0

@André:あなたがそれらを正しく使用しているかどうかはわかりません。私はテストケースを示すために、私の答えの最後にいくつかのトランスクリプトを追加しました。 – paxdiablo

0

は、シェル上でsedを使用してみてくださいn sedコマンドを次のように使用してください。sed -i '/\-\-/d' <filename>

+0

なぜ 'g'ですか? '--'の後に*すべて*をマッチさせると、1行に1つのオカレンスしか存在できません。 – Johnsyweb

+0

@Johnsywebはい、そうです。答えを編集しました。 –

1

あなたがCA:

pax$ echo ' 
    -- this line starts with it. 
this line does not 
and -- this one is not at the start' | grep -v '^ *-- ' 

this line does not 
and -- this one is not at the start 
+0

なぜバックスラッシュですか? – Johnsyweb

+0

両方の方法で動作します。sed -i '/ -/d' と書くことができます。私は ' - 'が特殊文字かもしれないと思っていたことは認めています。-iオプションを使ってファイル内のインプレースの変更を行うこともできます。 – explorer

+0

MacOSでこの作業をするためにバックスラッシュを追加する必要がありました。 –

関連する問題