0

私は次のような固定長のファイルを持っています

1234INen %^&           198787655
1234dnen %^& ($#       1987989809 

この特殊文字を * に置き換えたいだけです

切り取りコマンドを使用しましたが、フィールド間のスペースをトリミングしています。

cut -c 5-10

入力形式と長さを変更せずにその特殊文字を置き換える方法。

誰かがrepalceのsedコマンドを提案してください

4

5 に答える 5

1

次の sed コマンドを試すことができます。

sed 's/[^a-zA-Z0-9 ]/*/g' file
1234INen ***           198787655
1234dnen *** ***       1987989809

更新: op のコメントによると:from length 9-16 i just want to replace with *

この sed を使用します。

sed -r 's/^(.{9}).{8}/\1********/g' file
1234INen ********      198787655
1234dnen ********      1987989809
于 2013-11-07T10:21:35.383 に答える
0
 sed "s/[[:punct:]]/*/g"

--posixGNU sed に使用

于 2013-11-07T12:33:51.573 に答える
0

入力が予測可能な列にある場合は、awkFIELDWIDTHS を使用する方法が適している可能性があります。次のようなものを使用して、記述した内容を簡単に取得できます。

awk '{$2="*"}1' FIELDWIDTHS='8 8 16' infile

出力:

1234INen *        198787655
1234dnen *        198798980

しかし、余分な空白がたくさんあります。おそらく、最初と最後のフィールドを印刷するのに十分でしょうか?

awk '{print $1, "*", $NF}' infile

出力:

1234INen * 198787655
1234dnen * 1987989809
于 2013-11-07T12:40:09.933 に答える