剪切并替换bash

ulk*_*kar 3 bash shell cut

我必须使用这样组织的数据处理文件

AAAAA:BB:CCC:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
etc
Run Code Online (Sandbox Code Playgroud)

列可以具有不同的长度,但行始终具有相同的列数.

我希望能够剪切给定行的特定列并将其更改为我想要的值.

例如,我将应用我的命令并将文件更改为

AAAAA:BB:XXXX:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
Run Code Online (Sandbox Code Playgroud)

我知道如何用sed选择一个特定的行,然后剪切字段,但我不知道如何用我的值替换字段.

谢谢

sam*_*hen 6

这是一种方法awk:

按照您的示例,如果您想要替换第1行的第3个字段:

awk 'BEGIN{FS=OFS=":"} {if (NR==1) {$3 = "XXXX"}; print}' input_file
Run Code Online (Sandbox Code Playgroud)

输入:

AAAAA:BB:CCC:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
Run Code Online (Sandbox Code Playgroud)

输出:

AAAAA:BB:XXXX:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
Run Code Online (Sandbox Code Playgroud)

说明:

  • awk:调用awk命令
  • '...':单引号括起来的所有内容都是awk的说明
  • BEGIN{FS=OFS=":"}::用作输入和输出的分隔符​​.FS代表字段分隔符.OFS代表输出字段分隔符.
  • if (NR==1) {$3 = "XXXX"};:如果NR到目前为止读取的记录数()为1,则将第3个字段($3)设置为" XXXX".
  • print:打印当前行
  • input_file:输入文件的名称.

反之,如果你想做到的是简单地替换出现的所有东西CCCXXXX你的文件,只需做:

sed -i 's/CCC/XXXX/g` input_file
Run Code Online (Sandbox Code Playgroud)

请注意,这也将替换部分匹配,例如ABCCCDD- >ABXXXXDD