rub*_*o77 6 sed text-processing
我有一个test.txt
像这个例子这样的大文件:
foo
before ...
before some line
foo something interesting bar
after some lines
after ...
bar
Run Code Online (Sandbox Code Playgroud)
如何something interesting
使用基本的 bash 命令(例如sed
or grep
(不是awk
,我需要在没有 awk 的嵌入式设备上使用它)在第一次出现字符串“ ”之前创建一个新文件?
Sté*_*las 11
sed '/something interesting/,$d' < file > newfile
Run Code Online (Sandbox Code Playgroud)
可以优化为:
sed -n '/something interesting/q;p' < file > newfile
Run Code Online (Sandbox Code Playgroud)
为sed
尽快找到模式退出。
sed
正如@RakeshSharma 所指出的,使用 GNU 实现可以简化为
sed '/something interesting/Q' < file > newfile
Run Code Online (Sandbox Code Playgroud)
要就地截断文件,使用ksh93
代替bash
,您可以执行以下操作:
printf '' <>; file >#'*something interesting*'
Run Code Online (Sandbox Code Playgroud)
<>;
就像标准的<>
重定向操作符(以读+写方式打开),只是如果命令成功,文件会在最后被截断。<#pattern
寻找与模式匹配的下一行的开头。(请注意,它似乎适用于(至少使用 ksh93u+)printf ''
标准输出,但不适用于其他一些内置命令,例如true
,:
或eval
。看起来像一个错误。它也不能是脚本的最后一个命令(另一个错误))。