【问题标题】:Prepend number to the beginning of some lines in bash将数字添加到 bash 中某些行的开头
【发布时间】:2013-07-19 16:58:00
【问题描述】:

我有一个包含一些数字的文件

例如

$cat file
347678126
345258126
4378126
349878126
346123126
9678130
344838126
5678126

如果一行不以 34 开头,我需要将数字 34 添加到一行,如果该行以 34 开头,则不要添加任何内容

输出:

$cat file
347678126
345258126
344378126
349878126
346123126
349678130
344838126
345678126

我打算使用 awk:

cat file | awk '{print 34$1}' > file2

但它会在所有行中添加 34。

你能帮我吗?

【问题讨论】:

    标签: linux bash shell sh


    【解决方案1】:

    sed 可以方便地就地编辑文件

    sed -i '/^34/!s/^/34/' file
    

    【讨论】:

    • 说我 sed:非法选项 -- i
    • sed --version 输出什么?
    • AFAIK, -i 是一个非常古老的选项,除非你有一个自定义的busybox,比如sed, -i 应该得到支持。否则,您可以使用临时文件:sed '/^34/!s/^/34/' file > file.bak; mv file.bak file
    • @anishane: sed -i 完全不便携。它可能是“旧的”,因为它已经在 gnu-sed 中存在了很长时间,但是有许多 sed 中的选项从未有效并且从未成为标准。
    • 如果您的没有-i,只需放弃该选项并改用重定向。在支持的情况下,sed -i 将“就地”替换现有文件。
    【解决方案2】:

    你快到了,你只需要过滤掉以 34 开头的行:

    awk '!/^34/{printf 34}1' file
    

    【讨论】:

    • 也许还注意到您修复了UUoC
    猜你喜欢
    • 2012-01-02
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 2022-08-07
    • 2020-03-11
    相关资源
    最近更新 更多