如何从多个文件中删除特定字符串之前的所有行
我有 n 个文件,例如:
file1:
1aaa
2eee
Test XXX
Hanna
Lars
file2:
1fff
2ddd
3zzz
Test XXX
Mike
Charly
我想从所有 n 个文件中删除“Test XXX”之前的所有行。 要删除的行数因文件而异。
我的想法:
for file in 1 :n
do
pos=grep -n "Test XXX" file$file
sed -i "1:$pos-1 d" file$file >new$file
done
I have n files, like:
file1:
1aaa
2eee
Test XXX
Hanna
Lars
file2:
1fff
2ddd
3zzz
Test XXX
Mike
Charly
I want to remove all rows before "Test XXX" from all n files.
The number of rows to delete varies between files.
My idea:
for file in 1 :n
do
pos=grep -n "Test XXX" file$file
sed -i "1:$pos-1 d" file$file >new$file
done
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这应该对你有用:
或者简单地
This should work for you:
or simply
这将适用于您的示例,即使匹配的模式位于第一行:
例如,如果您输入只是简单,
这将为您提供
如果您想保留第一个匹配
Test XXX
则只需使用:This will work for your examples and even if the matched pattern is on the very first line:
For example if you input is simply
This will give you
If you want to keep the first match
Test XXX
then just use:您可以使用
bash
执行此操作(例如,对于 1 个文件)根据需要使用
for
循环来遍历所有文件You can do it with
bash
( eg for 1 file)Use a
for
loop as necessary to go through all the files输出:
解释:
-e '/Test *XXX/p'
重复匹配/Test *XXX/
的行-e '0,/Test *XXX/ d'
删除从第 0 行到第一行匹配/Test *XXX/
通过复制该行,然后删除第一行,我们有效地保留了匹配的行,成功删除了之前的所有行
测试XXX
注意:如果有多个
Test XXX
行,这将无法按预期工作。Output:
Explanation:
-e '/Test *XXX/p'
duplicates the line matching/Test *XXX/
-e '0,/Test *XXX/d'
deletes from line 0 to the first line matching/Test *XXX/
By duplicating the line, then removing the first one, we effectively retain the matched line, successfully deleting all lines BEFORE
Test XXX
Note: this will not work as expected if there are multiple
Test XXX
lines.