屏蔽特定位置和特定记录类型的数据

时间:2014-02-06 08:04:29

标签: string bash replace mask

更新:

我有一个非常大的文件。我需要屏蔽特定位置和特定记录类型中的所有字符。我搜遍了所有地方,但找不到这个非常简单的任务的解决方案。这是一个例子

档案名称: hello.txt的

文件:

0120140206INPUT FILE
1032682842 MR SIMPSON
20231458 742 Evergreen Terrace
3034560817绿色
1032682842 MR GRIFFIN
20231458 Spooner Street
3034560817 RED
3001

我想做的是屏蔽从10开始的所有行的12-16位。像这样:

0120140206INPUT FILE
1032682842 XXXXXMPSON
20231458 742 Evergreen Terrace
3034560817绿色
1032682842 XXXXXIFFIN
20231458 Spooner Street
3034560817 RED
3001

2 个答案:

答案 0 :(得分:0)

试试这个:

sed 's/^\(10[0-9]\+[ \t]\+\).*$/\1XXXXXXXXXXXXX/g'

示例:

sed 's/^\(10[0-9]\+[ \t]\+\).*$/\1XXXXXXXXXXXXX/g' <<< "0120140206INPUT FILE
1032682842 MR SIMPSON
20231458 742 Evergreen Terrace
9001"

答案 1 :(得分:0)

使用awk:

awk '/^10/{q=substr($0, 12); gsub(/./, "*", q); $0=substr($0, 1, 11) q}1' file
0120140206INPUT FILE
1032682842 **********
20231458 742 Evergreen Terrace
9001

更新:如果您只想屏蔽前10条记录,请使用此awk:

awk '!done && /^10/{q=substr($0, 12);gsub(/./, "*", q);$0=substr($0, 1, 11) q;done=1}1' file