首页 > 解决方案 > 当行以“:”结尾时,在行尾添加某些字符

问题描述

我有一个文本文件,其中包含以下两种类型的条目:

398/GHJKI:/opt/Check/D1/test_1234
875/GHgbhn:/opt/Check/D1/test_1235
398/ANgbhn:
398/ABNHJ:/opt/Check/D1/test_1237
123/ANgbhn:

我想在“/opt/Check/D1/test_1237”不存在的行末尾添加NA,这意味着该行以“:”结尾。

请让我知道如何做到这一点。

我试着这样做

if grep -q "test" "/home/C1.txt"; then
awk '$0=$0"NA"' /home/C1.txt > /home/C2.txt
else
:
fi

但这会将 NA 添加到每一行..我想将 NA 添加到以“:”结尾的行

输出应如下所示:

398/GHJKI:/opt/Check/D1/test_1234
875/GHgbhn:/opt/Check/D1/test_1235
398/ANgbhn:NA
398/ABNHJ:/opt/Check/D1/test_1237
123/ANgbhn:NA

标签: linuxshell

解决方案


你可以使用这个sed

sed 's/:$/&NA/' file

398/GHJKI:/opt/Check/D1/test_1234
875/GHgbhn:/opt/Check/D1/test_1235
398/ANgbhn:NA
398/ABNHJ:/opt/Check/D1/test_1237
123/ANgbhn:NA

这里:

  • :$::在行尾之前匹配
  • &NA: 替换为原始匹配的字符串,即:NA

推荐阅读