我有固定长度的文件,如
1234INen %^& 198787655
1234dnen %^& ($# 1987989809
我想只想用*
替换这个特殊字符我使用了cut命令,但它正在修剪字段之间的空格。
cut -c 5-10
如何在不改变输入格式和长度的情况下替换该特殊字符。
有人请为repalce建议sed命令
答案 0 :(得分:1)
你可以试试这个sed命令:
sed 's/[^a-zA-Z0-9 ]/*/g' file
1234INen *** 198787655
1234dnen *** *** 1987989809
更新:根据操作说明:from length 9-16 i just want to replace with *
使用此sed:
sed -r 's/^(.{9}).{8}/\1********/g' file
1234INen ******** 198787655
1234dnen ******** 1987989809
答案 1 :(得分:0)
只需删除您想要包含输出的所有内容,从而省略您不想要的内容。例如,要从“列”5-10中省略字符,请使用cut -c1-4,11-
,然后根据自己的喜好格式化输出,例如: cut -c1-4,11- < your_file.txt | awk '{ f=$1 ; $1="" ; printf "%s %s\n", f, $0 }'
(这将打印出第一个“列”,然后打印几个空格,然后打印其余的“列”。
答案 2 :(得分:0)
要删除不可打印的字符,可以试试这个,前提是你有一个支持POSIX字符类的sed(例如现代Linux):
sed -r 's/[^[:print:]]//' input.file > final.file
答案 3 :(得分:0)
sed "s/[[:punct:]]/*/g"
将--posix
用于GNU sed
答案 4 :(得分:0)
如果输入位于可预测的列中,那么带有FIELDWIDTHS的awk
可能就行了。您可以使用以下内容轻松获得您所描述的内容:
awk '{$2="*"}1' FIELDWIDTHS='8 8 16' infile
输出:
1234INen * 198787655
1234dnen * 198798980
但是还有很多额外的空白区域。也许足以打印第一个和最后一个字段?
awk '{print $1, "*", $NF}' infile
输出:
1234INen * 198787655
1234dnen * 1987989809