我有一个相当大的文件。我需要屏蔽特定位置和特定记录类型中的所有字符。我已经到处搜索,但找不到这个非常简单的任务的解决方案。这是一个例子
文件名: 你好.txt
文件:
0120140206INPUT FILE
1032682842 MR SIMPSON
20231458 742 Evergreen Terrace
3034560817 GREEN
1032682842 MR GRIFFIN
20231458 Spooner Street
3034560817 RED
3001
Run Code Online (Sandbox Code Playgroud)
我想做的是屏蔽以“10”开头的所有行的位置 12-16。像这样:
0120140206INPUT FILE
1032682842 XXXXXMPSON
20231458 742 Evergreen Terrace
3034560817 GREEN
1032682842 XXXXXIFFIN
20231458 Spooner Street
3034560817 RED
3001
Run Code Online (Sandbox Code Playgroud)
使用 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
Run Code Online (Sandbox Code Playgroud)
-rsed 中有用的选项,--regexp-extended/^10/搜索以 10 开头的行。s/^(.{11}).{5}/\1XXXXX/ 掩码位置 12-16 至 XXXXX同样的想法,如果你的awk是gawk,并且支持gensub()功能:
awk '{$0=gensub(/^(10.{9}).{5}/,"\\1XXXXX",$0)}1' file
Run Code Online (Sandbox Code Playgroud)
更新:@tripleee 提供了一个较短的:
sed -r 's/^(10.{9}).{5}/\1XXXXX/' file
Run Code Online (Sandbox Code Playgroud)