1
ppxppx 2021-04-10 09:39:02 +08:00 via Android
find . -type f | xargs sed -i 's/^aaa.*eee$//g'
|
2
sjmcefc2 OP 代码块是不同行的
^aaa 是开头吧,eee$是结尾。 这样是不是必须要同一行才可以删除呢 |
3
hztDbFXEed73dkMf 2021-04-10 09:58:15 +08:00
find . -type f|xargs sed -i.bak '/aaa/,/eee/d'
|
5
Akiyu 2021-04-10 10:30:21 +08:00 1
sed 有多行模式. 你可以参考一下.
那东西不仅麻烦也很少用, 一般你得自己研究. https://www.gnu.org/software/sed/manual/sed.html 重点关注一下. 7.1 Joining lines 我记得之前有用它处理过多行文本处理的问题. 应该是可行的. |
6
scinart 2021-04-10 10:56:55 +08:00
sed 从 3 删到 6, see `info sed` 6.3 Multiline techniques
seq 9 | sed '/3/{:x; s.6.6.; tn; N; bx; :n; d;}' |
7
Jirajine 2021-04-10 10:59:48 +08:00 via Android
你在这里琢磨 sed 的时间,直接用 Python 已经写好了。
|
8
sjmcefc2 OP python 也可以?大神赐教
|
9
kokutou 2021-04-10 11:10:01 +08:00
py 按行读取, 写入到临时文件, 遇到 aaa 就不写了,到了 eee 再继续写....
|
11
sjmcefc2 OP 另外,不如我想在 aaa 和 eee 之间插入一些不同行的代码,该怎么做呢
|
12
sjmcefc2 OP 另外,不如我想在 aaa 和 eee 之间插入一些不同行的代码,该怎么做呢
----- 用\n 来换行就可以了。 |
13
no1xsyzy 2021-04-10 18:51:54 +08:00
基本骨架长这样
#!/usr/bin/env python3 import sys for line in sys.stdin: assert line[-1] in "\r\n" sys.stdout.write(line) chmod +x 或者 python3 a <in.txt >out.txt 然后随意改改就成。 |
14
no1xsyzy 2021-04-10 18:56:52 +08:00
(啊,如果最后一行结尾不在第一列是没有 line break 的,忘记那句 assert 吧
|
15
smyle 2021-04-10 23:38:38 +08:00
sed '/aaa/,/eee/d' $文件名
意思就是删除 aaa 到 eee 之间的所有行(正则匹配,包括 aaa 和 eee 本身) 如果要保留 aaa 和 eee 这两行的话 sed '/aaa/,/bbb/{/aaa/!{/bbb/!d}}' $文件名 |