2

私は多くの csv ファイルを扱っていますが、sed を使用して固定位置(文字 9 ~ 16)で部分文字列を選択し、それを行の先頭にコピーする方法が見つかりません。

これは私が持っているものです:

ABC09638006924340017;SOME_TEXT;SOME_OTHER_TEXT

これは私が必要なものです:

00692434;ABC09638006924340017;SOME_TEXT;SOME_OTHER_TEXT

sed の次のコードは、必要な部分文字列(00692434)を提供しますが、行全体を上書きします。

sed 's/^.{8}(.{8}).*/\1/')

私はすでに sed を使用してラインストリングを「クリーン」にし、最後にデータを postgres にインポートする bash スクリプトで呼び出されるいくつかの変数を挿入しています。これが、私が sed 内にとどまることを好む理由ですが、私は本当の専門家ではないので、ヒントをいただければ幸いです。

4

2 に答える 2

4

これはあなたのために働くかもしれません(GNU sed):

sed -r 's/^.{8}(.{8})/\1;&/' file
于 2013-05-19T00:23:54.210 に答える
4

\{\}中括弧 ( ) と括弧 ( )をエスケープし、元の文字列 ( ) を置換に\(\)追加する必要があります。&

text="ABC09638006924340017;SOME_TEXT;SOME_OTHER_TEXT"
echo $text | sed "s/^.\{8\}\(.\{8\}\).*/\1;&/"

出力:

00692434;ABC09638006924340017;SOME_TEXT;SOME_OTHER_TEXT

固定長の部分文字列を固定位置で抽出したいので、bash-builtins だけでこれを行うこともできます。

text="ABC09638006924340017;SOME_TEXT;SOME_OTHER_TEXT"
echo "${text:8:8};$text"
于 2013-05-19T00:24:11.647 に答える