私は次のような固定長のファイルを持っています
1234INen %^& 198787655
1234dnen %^& ($# 1987989809
この特殊文字を * に置き換えたいだけです
切り取りコマンドを使用しましたが、フィールド間のスペースをトリミングしています。
cut -c 5-10
入力形式と長さを変更せずにその特殊文字を置き換える方法。
誰かがrepalceのsedコマンドを提案してください
次の 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
sed "s/[[:punct:]]/*/g"
--posix
GNU sed に使用
入力が予測可能な列にある場合は、awk
FIELDWIDTHS を使用する方法が適している可能性があります。次のようなものを使用して、記述した内容を簡単に取得できます。
awk '{$2="*"}1' FIELDWIDTHS='8 8 16' infile
出力:
1234INen * 198787655
1234dnen * 198798980
しかし、余分な空白がたくさんあります。おそらく、最初と最後のフィールドを印刷するのに十分でしょうか?
awk '{print $1, "*", $NF}' infile
出力:
1234INen * 198787655
1234dnen * 1987989809