bash - 剪切并替换 bash

标签 bash shell cut

我必须处理一个包含这样组织的数据的文件

AAAAA:BB:CCC:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP
etc

列的长度可以不同,但​​行的列数始终相同。

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

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

AAAAA:BB:XXXX:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP

我知道如何使用 sed 选择特定行,然后剪切该字段,但我不知道如何用我拥有的值替换该字段。

谢谢

最佳答案

下面是使用 awk 的方法:

继续你的例子,如果你想替换第一行的第三个字段:

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

输入:

AAAAA:BB:CCC:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP

输出:

AAAAA:BB:XXXX:EEEE:DDDD
FF:III:JJJ:KK:LLL
MMMM:NN:OOO:PP

解释:

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

如果您想要完成的只是将文件中所有出现的 CCC 替换为 XXXX,只需执行以下操作:

sed -i 's/CCC/XXXX/g` input_file

请注意,这也会替换部分匹配项,例如 ABCCDD -> ABXXXXDD

关于bash - 剪切并替换 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13588949/

相关文章:

linux - 读取一个文件以搜索另一个文件并打印出缺失的行

linux - 带有变量和字符串的 echo 命令

bash - 使用 bash 更改 sendmail 发件人

linux - 抓取屏幕输出并解析为 csv 的 bash 脚本

arrays - 在 Bash 中将以空格分隔的字符串读入数组

linux - 如何从 Perl 中 ls -lrt 的输出中仅查找/剪切文件名

bash - 给定一个 logfile.txt,我只想提取 java 脚本名称;例如使用 bash 脚本的 filename.js

php - CURL:发布表单并从 bash 获取数据

linux - 用于查找和计算所有文件中字符总数的 Shell 脚本

regex - 从 CSV 中用逗号分隔文本?