首页 > 解决方案 > 如何在循环中特定行的末尾附加一个字符?

问题描述

我想从一个文件中读取行号,并根据在另一个文件中插入字符。这是我到目前为止得到的:

#!/bin/bash

character=:
line_number=1
sed $line_number's/$/ '$character'/' <readme >readme_new
line_number=3
sed $line_number's/$/ '$character'/' <readme_new >readme_newer

我现在想循环执行此操作。

标签: bash

解决方案


TL;博士:

$: c='!'
$: sed "s#\$# s/\$/ $c/#" fibs >script
$: sed -i "$(<script)" infile

爆发了——

行号文件:

$: cat fibs
1
2
3
5
8
13
21

要编辑的文件:

$: cat infile
  1 a
  2 b
  3 c
  4 d
  5 e
  6 f
  7 g
  8 h
  9 i
 10 j
 11 k
 12 l
 13 m
 14 n
 15 o
 16 p
 17 q
 18 r
 19 s
 20 t
 21 u
 22 v
 23 q
 24 x
 25 y
 26 z

3 个步骤——c如果你使用一个,首先设置你的 haracter 变量。

$: c='!'

然后从行号文件制作一个脚本 -

$: sed "s#\$# s/\$/ $c/#" fibs >script

创建:

$: cat script
1 s/$/ !/
2 s/$/ !/
3 s/$/ !/
5 s/$/ !/
8 s/$/ !/
13 s/$/ !/
21 s/$/ !/

sed为每个行号添加替换命令很简单sed,并将生成的脚本发送到文件中。这里的一些技巧包括使用双引号来允许字符嵌入,以及 #'s 允许替换文本包含 /'s 而不会从所有反斜杠引用中产生倾斜牙签综合症。

然后根据您的输入运行它 -

$: sed -i "$(<script)" infile

哪个起作用。这会将脚本文件内容拉入以供sed使用,生成:

  1 a !
  2 b !
  3 c !
  4 d
  5 e !
  6 f
  7 g
  8 h !
  9 i
 10 j
 11 k
 12 l
 13 m !
 14 n
 15 o
 16 p
 17 q
 18 r
 19 s
 20 t
 21 u !
 22 v
 23 q
 24 x
 25 y
 26 z

如果你想调整它,请告诉我。


推荐阅读