嗨假设我有一个看起来像这样的文件:
x
x
x
A
B
C
1
2
3
D
E
F
x
x
x
以及需要文件看起来像什么:
x
x
x
A
B
C
D
E
F
1
2
3
x
x
x
我知道我可以用几sed -i s/search/replace/g
行来做到这一点,但我想知道是否有更好、更简单的方法可以在任一方向上x
按数字移动行y
数?
嗨假设我有一个看起来像这样的文件:
x
x
x
A
B
C
1
2
3
D
E
F
x
x
x
以及需要文件看起来像什么:
x
x
x
A
B
C
D
E
F
1
2
3
x
x
x
我知道我可以用几sed -i s/search/replace/g
行来做到这一点,但我想知道是否有更好、更简单的方法可以在任一方向上x
按数字移动行y
数?
编
使用
sed
(向下移动行,因为使用流编辑器最简单):您可以将脚本解读
sed
为“将第 7 行到第 9 行移到第 12 行之后”。脚本注释:
由于行可以通过正则表达式(不仅仅是行号)来处理,因此以下内容也可以(在此特定数据上):
即,“将行从以
1
通过开头的行移动到以”开头3
的行之后的行F
。将上述内容直接翻译成
awk
:使用“行号”(记录号
awk
):条件
NR == 7, NR == 9
也可以写NR >= 7 && NR <= 9
。为了 100% 忠实于
sed
代码,应该读取第二个块,{ $0 = $0 ORS hold; sub(ORS, "", $0) }
但是插入输出记录分隔符(默认为换行符)只是在之后立即删除它有点愚蠢。用上述命令的结果替换原始文件:
或与
awk
命令相同的事情。sed
如果/的输入文件awk
不能被读取,或者如果输出文件不能被写入,这将使原始文件保持不变。