【问题标题】:insert text at nth offset from start in command line在命令行中从开始的第 n 个偏移处插入文本
【发布时间】:2016-12-06 22:14:57
【问题描述】:

我有一个文件,我需要在其中插入一些文本的起始位置偏移。例如如果文件如下所示

Hello World
How are you doing today?
I'm good. Thanks for asking.

我可能会从我必须到 insert 文本的开始处获得 3、10、25 偏移量之类的输入。

有没有命令行的方式来做到这一点?我尝试过使用sed,但是它逐行工作并且不尊重从开始的偏移量。这是我为 sed 写的

sed 's/./&\
 inserted text\
   /25' in.txt > out.txt

上面所做的是 - 对于每一行,在第 25 个字符处插入 inserted text - 但是,我希望它在文件起始位置的第 25 个偏移处完成。

【问题讨论】:

    标签: bash shell awk sed


    【解决方案1】:

    一种方法是在awk 中使用控制字符RS。这使得整个文件成为 awk 的一条记录:

    awk -v RS='\07' -v p=25 -v t='inserted text' '{
          print substr($0, 1, p) t substr($0, p+1)}' ORS= file
    
    Hello World
    How are you dinserted textoing today?
    I'm good. Thanks for asking.
    

    【讨论】:

    • 我们可以把它写回到文件中,而不是打印出来吗?
    • 是肯定的awk -v RS='\07' -v p=25 -v t='inserted text' '{print substr($0, 1, p) t substr($0, p+1)}' ORS= file > _file.tmp && mv _file.tmp file 或使用awk -i inplace -v RS='\07' -v p=25 -v t='inserted text' '{print substr($0, 1, p) t substr($0, p+1)}' ORS= file(如果使用gnu awk)
    • 如何确保我使用的是 gnu awk(对不起,如果这个问题太天真了)
    • 运行awk --version
    • 我收到awk version 20070501
    猜你喜欢
    • 2020-02-14
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2020-05-21
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多