特定の場所の特定の文字を削除するシェルスクリプト

特定の場所の特定の文字を削除するシェルスクリプト

次のデータを想定します。わかりやすくするために、以下の29の位置を使用しています。場所29が文字または数字で始まるかどうかを確認したいと思います。たとえば、最初の行から文字「U」を削除する必要がある場合は、2番目の行「D」を削除する必要があり、3番目の行は数字で始まるため、何もする必要はありません。

47720920010500002           U314178
37966744783100812           D123455
37966880762200334           356678

私は次を試しました

sed 's/^\(.\{212\}\)U/\&/' $file_name   

...212番目の文字「U」を空白に置き換えます。

cut -c -211,213- $file_name 

...位置212からスペースを削除します。

定数Uの場合、このコードは機能します。 azのすべてのaplhabetsを確認するには、コマンド(存在する場合)の助けが必要です。

ベストアンサー1

あなたは以下に密接に関連しています。

sed 's/^\(.\{212\}\)U/\&/' $file_name

を使用して最初の212文字をキャプチャしました\(...\)。あなたがしなければならない\1のは、交換でそのコンテンツを参照することだけです。 literalを含む&一致するフルテキストに置き換えられますU\&&

また、212 番目の文字を削除する場合は、212 文字ではなく、前の 211 文字を一致させることになります。

だから:

sed 's/^\(.\{211\}\)U/\1/' < "$file_name"

または:

sed -- 's/^\(.\{211\}\)U/\1/' "$file_name"

(また、不足している引用符を追加し、$file_nameファイル名が次に始まるのを防ぐ2つの異なる方法を示しました-(最初の方法は、名前付きファイルでも機能し、-ファイルを開くことができない場合は実行を防ぐためです)。 。sed

U単一の文字と一致するように変更します[[:alpha:]](まあ、人間の言語スクリプトで使用されるグラフィック記号は文章ではありません)。または、[[:upper:]]大文字またはASCII文字の場合(いいえ、これは通常/などの文字を含むものと同じではなく、一部のロケールでは/などの複数文字の組み合わせ要素でもあります[ABCDEFGHIJKLMNOPQRSTUVWXYZ])。[A-Z]ÆÊDZSDzs

おすすめ記事