我想从一个文件中读取行号,并据此在另一个文件中插入字符。这是我到目前为止所得到的:
#!/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
我现在想循环进行一次。
答案 0 :(得分:2)
TL; DR:
$: 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
替换命令,然后将生成的脚本发送到文件中。这里的一些技巧包括使用双引号来嵌入字符,并使用#来允许替换文本包含/,而不会从所有反斜杠引号中创建倾斜牙签综合症。
然后根据您的输入运行它-
$: 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
让我知道您是否想要对其进行调整。