2016-07-08 10 views
1

私はテキストファイルを持っており、.m2または.M2で終わるすべての行を保存したいと思います。私はここでSed。特定のファイルタイプで終わる行を保存する

D:\filetype\core\sed.exe -n -e "s/^\(.*\)\.M2//" D:\filetype\listfile\test.txt > D:\filetype\listfile\test2.txt 

このなど、いくつかの方法を試してみましたが、結果として、私は唯一のemtpyテキストファイルを取得するので、私は何かが私のコードが間違っていると思います。

他の方法だった

D:\filetype\core\sed.exe -n -e "^/\(.*)\/.M2\/" D:\filetype\listfile\test.txt > D:\filetype\listfile\test2.txt 

しかし、この場合には、私はエラー

不明なコマンドのソース見つけることができませんでした: `^」

感謝を誰かが私のせいを見ることができれば。

答えて

2

あなたはsedコマンドの下に使用することができます。

sed -n -e '/\.[mM]2$/p' <file_name> 

これは、今すぐあなたのコマンドで問題に来終了

.m2または.M2を持つすべての行を出力します。あなたの最初のコマンドはありません:

sed -n -e "s/^\(.*\)\.M2//" 

コマンドでsによってindiacated search and replaceコマンドです。このコマンドの構文はs/search_text/replace_text/です。あなたのコマンドを慎重に見ているなら、何かを探して、最後に//replace_textがない)のようにnothingと置き換えています。

あなたの2番目のコマンドが不正な構文である

sed -n -e "^/\(.*)\/.M2\/" 

を行います。 sedコマンドの一般的な構文は次のとおりです。ラインの範囲

sed -e 'line_range command' 

- オプションある - 152-5、または/[gG]/のような正規表現、/[gG][iIuU]rl/などの行番号することができます。 line_rangeがない場合、sedコマンドの最初の文字はコマンドでなければなりません。あなたの場合:line_rangeがありません - 構文は賢明ですが、最初の文字は^です。ではなくです。これは構文エラーです。私が提案し

コマンド

line_rangeが正規表現 /\.[mM]2$/あり、ここで

sed -n -e '/\.[mM]2$/p' 

ある - "any line which has .m2 or .M2 at the end"を言うと、コマンドが印刷コマンドの文字ですp、です。

+0

詳細な回答ありがとうございます、私は今それをよく理解できます(そして、うまくいけば、Googleを検索している間にもっと多くの人々がいるでしょう)。私はここで私の個人的なお気に入りに追加します。 – Deex

1

Sedは主にテキストの変換に使用されます。代わりにgrepを使用してみませんか?

grep -i "\.m2$" 

これは(-i)鈍感.m2で終わる任意の行の場合に一致します。

+0

良い質問ですが、主に私はこれがsedでどうやってできるのか分かりませんでしたし、情報がわかりやすくするために役立つと思います。しかし、もちろん、あなたは正しいです、私はいつsedを使うべきか、そしてgrepを考えます。 – Deex

関連する問題