本文介绍了猛击一线掩盖文件中的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个很大的文件.我需要掩盖特定位置和特定记录类型中的所有字符.我到处搜索,但是找不到这个非常简单的任务的解决方案.这是一个例子

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
  • Explanation

    • -r useful option in sed, --regexp-extended
    • /^10/ Search the line beginning with 10.
    • s/^(.{11}).{5}/\1XXXXX/ mask position 12-16 to XXXXX
    • 同样的想法,如果您的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
      

      这篇关于猛击一线掩盖文件中的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 17:16