bash - 如何在循环中特定行的末尾附加一个字符?
问题描述
我想从一个文件中读取行号,并根据在另一个文件中插入字符。这是我到目前为止得到的:
#!/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
我现在想循环执行此操作。
解决方案
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
如果你想调整它,请告诉我。
推荐阅读
- c# - 获取列表
来自 PathGeometry - java - Jackson XmlMapper:自定义反序列化器 XML 子节点结构为字符串
- php - TYPO3 没有读取我的扩展的 setup.txt 或 constants.txt
- java - 使用 GSON 从 JSON 转换,无法将 ArrayList 转换为对象
- cassandra - Cassandra 进程在 ram 使用中增长,并且从未被释放
- python - 使用python将GMT纪元时间转换为原始GMT
- docker - 用旧电脑运行 Docker
- java - POI 复制图像不调整大小
- html - 如何使用 flexbox 使徽标居中?
- intellij-idea - 如何将 EditorConfig 样式应用于所有文件,包括没有扩展名的文件?