如何替换掉4605534这个数字,不包含14605534或者46055341这种

问题:如何替换掉4605534这个数字,不包含14605534或者46055341这种?

为了仅替换掉准确的 4605534 数字,而不替换包含类似 1460553446055341 的行,可以使用正则表达式来确保匹配独立的 4605534 数字。以下是使用 sed 的方法:

sed -E 's/\b4605534\b/NEW_VALUE/g' iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf

如果 sed 不支持 \b 边界符(在某些系统上,默认的 sed 版本可能不支持),可以使用以下替代方法确保匹配完整的数字 4605534

sed -E 's/(^|[[:space:]])4605534($|[[:space:]])/\1NEW_VALUE\2/g' iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf

上面的命令解释如下:

  • sed -E: 启用扩展正则表达式。
  • 's/(^|[[:space:]])4605534($|[[:space:]])/\1NEW_VALUE\2/g': 这是 sed 的替换命令。
    • (^|[[:space:]]): 匹配行首或空白字符前的 4605534
    • ($|[[:space:]]): 匹配行尾或空白字符后的 4605534
    • \1\2 是捕获组,分别对应于行首或空白字符以及行尾或空白字符,这样确保替换后保持原有的前后字符不变。
    • NEW_VALUE: 是你希望替换成的新值。

下面是一个完整的例子,展示如何将文件中的 4605534 替换为 NEW_VALUE 并将结果保存到一个新的文件中:

sed -E 's/(^|[[:space:]])4605534($|[[:space:]])/\1NEW_VALUE\2/g' iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf > modified_iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf

这样,你就可以将文件中的独立 4605534 替换为 NEW_VALUE,而不会影响包含 1460553446055341 的行,并将结果保存到一个新的文件中。

还有别的方法吗?

当然,可以使用其他方法来确保仅替换独立的 4605534,而不替换包含类似 1460553446055341 的行。我们可以尝试使用更复杂的正则表达式来确保准确性。以下是一些替代方法:

方法 1:使用 awk

awk 是一个强大的文本处理工具,可以用来精确地替换匹配的模式。

awk '{for(i=1;i<=NF;i++) if($i == "4605534") $i="NEW_VALUE"; print}' iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf > modified_iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf

这个命令解释如下:

  • awk '{for(i=1;i<=NF;i++) if($i == "4605534") $i="NEW_VALUE"; print}': 对每一行中的每一个字段进行检查,如果字段值等于 4605534,则将其替换为 NEW_VALUE
  • > modified_iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf: 将输出重定向到一个新的文件中。

方法 2:使用 perl

perl 支持更强大的正则表达式,可以用来确保匹配独立的数字 4605534

perl -pe 's/\b4605534\b/NEW_VALUE/g' iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf > modified_iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf

这个命令解释如下:

  • perl -pe 's/\b4605534\b/NEW_VALUE/g': 使用 perl 的正则表达式替换功能,\b 确保匹配的是独立的 4605534
  • > modified_iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf: 将输出重定向到一个新的文件中。

方法 3:使用 sed 结合正则表达式

使用 sed 并确保正确匹配独立的数字,可以通过更复杂的边界检查:

sed -E 's/(^|[^0-9])4605534([^0-9]|$)/\1NEW_VALUE\2/g' iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf > modified_iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf

这个命令解释如下:

  • sed -E 's/(^|[^0-9])4605534([^0-9]|$)/\1NEW_VALUE\2/g': 使用 sed 的扩展正则表达式,(^|[^0-9]) 匹配开头或非数字字符,([^0-9]|$) 匹配结尾或非数字字符,这样确保 4605534 是独立的数字。
  • > modified_iwgsc_refseqv2.1_annotation_200916_HC_LC.gtf: 将输出重定向到一个新的文件中。

这三种方法都能确保仅替换独立的 4605534,而不会影响包含类似 1460553446055341 的行。根据你的具体需求选择最适合的方法。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 17:28:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 17:28:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 17:28:03       58 阅读
  4. Python语言-面向对象

    2024-07-13 17:28:03       69 阅读

热门阅读

  1. 使用Spring Boot集成Zipkin分布式追踪

    2024-07-13 17:28:03       18 阅读
  2. Flink实时开发添加水印的案例分析

    2024-07-13 17:28:03       19 阅读
  3. json保存文件乱码

    2024-07-13 17:28:03       21 阅读
  4. 神经网络——数据预处理

    2024-07-13 17:28:03       21 阅读
  5. C 标准库 - <stdio.h>

    2024-07-13 17:28:03       19 阅读
  6. 等保2.0对云计算有哪些特定的安全要求?

    2024-07-13 17:28:03       20 阅读
  7. [Spring Boot]Rest服务调用远程Get、Post请求

    2024-07-13 17:28:03       21 阅读
  8. 今日科技圈最新时事新闻(2024年7月12日

    2024-07-13 17:28:03       21 阅读
  9. Leetcode刷题4--- 寻找两个正序数组的中位数 Python

    2024-07-13 17:28:03       21 阅读
  10. 网络安全那些梗

    2024-07-13 17:28:03       20 阅读