Regex 在文本文件中使用短的单个命令行(如awk、sed或perl)替换冒号后面的特定值

Regex 在文本文件中使用短的单个命令行(如awk、sed或perl)替换冒号后面的特定值,regex,bash,perl,awk,sed,Regex,Bash,Perl,Awk,Sed,我试着看了很多问题,但仍然无法创建一些awk命令。基本上,我有一个带有空格缩进(而不是制表符)的文件,我只想更改字段price、quantity和symbol的值“[scrub]”。如何使用单行命令来维护文件的格式和其他值 发件人: 致: 提前谢谢 仅用于价格例如: $ perl -pe 's/^(\s+Price\s+:\s+).*/$1\[scrub\]/g' prices Values: Client Order ID : new00000000

我试着看了很多问题,但仍然无法创建一些awk命令。基本上,我有一个带有空格缩进(而不是制表符)的文件,我只想更改字段price、quantity和symbol的值“[scrub]”。如何使用单行命令来维护文件的格式和其他值

发件人:

致:

提前谢谢

仅用于
价格
例如:

$ perl -pe 's/^(\s+Price\s+:\s+).*/$1\[scrub\]/g' prices
Values:
    Client Order ID                   : new000000000001
        Client Quote ID                   : N/A
        Exchange Quote ID                 : N/A
        Symbol                            : EUR/USD
      Spot attributes
        Price                             : [scrub]
        Discretion                        : $0.00000000 : 0
        Quantity 
其余的:

$ perl -pe '
    s/^(\s+Price\s+:\s+).*/$1\[scrub\]/g;
    s/^(\s+Symbol\s+:\s+).*/$1\[scrub\]/g;
    s/^(\s+Quantity\s+:\s+).*/$1\[scrub\]/g;
' file

最后我创建了一个脚本,因为命令太大了。我放在这里只是为了提供信息:

#!/usr/bin/env perl
use strict;
use warnings;
open INPUTFILE, "<", $ARGV[0] or die $!;
open OUTPUTFILE, ">", $ARGV[1] or die $!;
while (<INPUTFILE>) {
  s/^(\s+Price\s+:\s+).*/$1\[scrub\]/g;
  s/^(\s+Symbol\s+:\s+).*/$1\[scrub\]/g;
  s/^(\s+Quantity\s+:\s+).*/$1\[scrub\]/g;
  s/^(\s+FIX content drop copy only\s+:\s+).*/$1\[scrub\]/g;
  print OUTPUTFILE;
}
close OUTPUTFILE;
close INPUTFILE;
#/usr/bin/env perl
严格使用;
使用警告;
打开INPUTFILE“,$ARGV[1]或die$!;
而(){
s/^(\s+价格\s+:\s+。*/$1\[scrub\]/g;
s/^(\s+Symbol\s+:\s+。*/$1\[scrub\]/g;
s/^(\s+数量\s+:\s+。*/$1\[scrub\]/g;
s/^(\s+仅修复内容拖放副本\s+:\s+。*/$1\[scrub\]/g;
打印输出文件;
}
关闭输出文件;
关闭输入文件;

请复制上面的示例数据,但插入所需的更改。这消除了由于规范不明确而导致的一系列错误。(IMHO)。祝你好运,完成了。谢谢你的提示。嗨,谢谢你的回答。你能告诉我怎样才能把所有的东西都放在同一条线上吗?符号、价格和数量?
$ perl -pe '
    s/^(\s+Price\s+:\s+).*/$1\[scrub\]/g;
    s/^(\s+Symbol\s+:\s+).*/$1\[scrub\]/g;
    s/^(\s+Quantity\s+:\s+).*/$1\[scrub\]/g;
' file
#!/usr/bin/env perl
use strict;
use warnings;
open INPUTFILE, "<", $ARGV[0] or die $!;
open OUTPUTFILE, ">", $ARGV[1] or die $!;
while (<INPUTFILE>) {
  s/^(\s+Price\s+:\s+).*/$1\[scrub\]/g;
  s/^(\s+Symbol\s+:\s+).*/$1\[scrub\]/g;
  s/^(\s+Quantity\s+:\s+).*/$1\[scrub\]/g;
  s/^(\s+FIX content drop copy only\s+:\s+).*/$1\[scrub\]/g;
  print OUTPUTFILE;
}
close OUTPUTFILE;
close INPUTFILE;