本文介绍了猛击一线掩盖文件中的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个很大的文件.我需要掩盖特定位置和特定记录类型中的所有字符.我到处搜索,但是找不到这个非常简单的任务的解决方案.这是一个例子
I have a file which is quite big. I need to mask all characters in specific postions and from a specific record type. I have searched all over the place but cannot find a solution of this quite simple task. Here is an example
文件名:hello.txt
File name: hello.txt
文件:
0120140206INPUT FILE
1032682842 MR SIMPSON
20231458 742 Evergreen Terrace
3034560817 GREEN
1032682842 MR GRIFFIN
20231458 Spooner Street
3034560817 RED
3001
我想做的是屏蔽以"10"开头的所有行的位置12-16.像这样:
What I would like to do is to mask position 12-16 of all lines beginnning with "10". Like this:
0120140206INPUT FILE
1032682842 XXXXXMPSON
20231458 742 Evergreen Terrace
3034560817 GREEN
1032682842 XXXXXIFFIN
20231458 Spooner Street
3034560817 RED
3001
推荐答案
使用sed
sed -r '/^10/ s/^(.{11}).{5}/\1XXXXX/' file
0120140206INPUT FILE
1032682842 XXXXXMPSON
20231458 742 Evergreen Terrace
3034560817 GREEN
1032682842 XXXXXIFFIN
20231458 Spooner Street
3034560817 RED
3001
说明
- sed中的
-
-r
有用选项--regexp-extended -
/^ 10/
搜索以10开头的行. -
s/^(.{11}).{5}/\ 1XXXXX/
将位置12-16屏蔽为XXXXX -r
useful option in sed, --regexp-extended/^10/
Search the line beginning with 10.s/^(.{11}).{5}/\1XXXXX/
mask position 12-16 to XXXXX
Explanation
同样的想法,如果您的awk是gawk,并且支持 gensub()
函数:
With same idea, if your awk is gawk, and support gensub()
function:
awk '{$0=gensub(/^(10.{9}).{5}/,"\\1XXXXX",$0)}1' file
更新:@tripleee提供了一个简短的内容:
update: @tripleee provide a shorter one:
sed -r 's/^(10.{9}).{5}/\1XXXXX/' file
这篇关于猛击一线掩盖文件中的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!