1

私はこれまでグーグルを検索してきましたが、これを行う方法の例が見つかりません。また、SED の正規表現を構築する方法の概念も理解していないため、誰かがこれを説明してくれることを期待していました。

次のようなテキスト行でいっぱいのファイルに対して bash スクリプトを実行しています: 2222,H,73.82,04,07,2012

そして、それらをすべて次のようにする必要があります: 2222,H,73.82,04072012

最後の 2 つのコンマ (行の 16 番目と 19 番目の文字) を削除する必要があります。誰かがそれを行う方法を教えてもらえますか? ありがたいことに簡単なcolrmを使用するつもりでしたが、CYGWINにインストールできないようです。よろしくお願いします!

4

6 に答える 6

4

私はこれに使用awkします:

awk -F',' -v OFS=',' '{ print $1, $2, $3, $4$5$6 }' inputfile

これは CSV ファイルを取得し、1 番目、2 番目、3 番目のフィールドを出力し、それぞれに出力フィールド セパレータ ( ",") が続き、4、5、6 番目のフィールドが連結されます。

個人的には、これは正規表現ベースのソリューションよりも読みやすく、維持しやすいとsed思います。また、列のいずれかが広くなった (または狭くなった!) 場合にもうまく対処できます。

于 2012-04-18T20:12:56.107 に答える
2

これは任意の文字列で機能し、最後の 2 つのコンマのみを削除します。

sed -e 's/\(.*\),\([^,]*\),\([^,]*\)$/\1\2\3/' infile.txt

私の sed バリアントでは、括弧 YMMV をエスケープする必要があることに注意してください。

于 2012-04-18T20:13:18.230 に答える
1
echo "2222,H,73.82,04,07,2012" | sed -r 's/(.{15}).(..)./\1\2/'

15文字を取り、1つドロップし、2つ取り、1つドロップします。

于 2012-04-18T22:04:26.207 に答える
1

それはうまくいくはずです:

sed -e 's~,~~4g' file.txt

4番目と次のコンマを削除

于 2012-04-18T20:22:34.220 に答える
1

また、SED の正規表現を構築する方法の概念も理解していないため、誰かがこれを説明してくれることを期待していました。

ここで人々があなたに言っている基本的な表記法は次のとおりです。s/PATTERN/REPLACEMENT/

PATTERN は正規表現であり、括弧内の部分が含まれる場合があります。これらの部分は、コマンドの REPLACEMENT 部分で参照できます。例えば:

> echo "aabbcc" | sed 's/\(..\)\(..\)\(..\)/\2\3\1/'
bbccaa

sed のバージョンでは、デフォルトで「基本的な」RE 方言を使用していることに注意してください。ここでは、式の括弧をエスケープする必要があります。「拡張」方言でも同じことができます。

> echo "aabbcc" | sed -E 's/(..)(..)(..)/\2\3\1/'
bbccaa

-r(GNU sed (Linux にある) では、の代わりにオプションを使用して同じ結果を得ることができます-E。私は OS X を使用しています。)

あなたの仕事のために、私は間違いなくJohnsywebのアドバイスに従い、sedの代わりにawkを使用すると言わなければなりません。はるかに理解しやすい。:)

于 2012-04-18T20:32:25.350 に答える
0
sed -e 's/(..),(..),(....)$/\1\2\3/' myfile.txt
于 2012-04-18T20:00:08.547 に答える