mic*_*imo 17 command-line text-processing
在有很多行的文件中,我想删除以HERE IT IS.
如何仅使用命令行工具执行此操作?
hee*_*ayl 31
尝试sed:
sed -i '/^HERE IT IS/d' <file>
Run Code Online (Sandbox Code Playgroud)
警告:最好在使用以下-i开关时进行备份sed:
sed -i.bak '/^HERE IT IS/d' <file>
Run Code Online (Sandbox Code Playgroud)
原始文件将保持原样<file>.bak,修改后的文件将是<file>.
ter*_*don 20
除了很好的grep和sed聪明的你已经收到了,这里有一些其他的工具可以做同样的事情:
一些 Perl 方法:
perl -ne '/^HERE IT IS/ || print' file > newfile
perl -ne 'print if !/^HERE IT IS/' file > newfile
perl -ne 'print unless /^HERE IT IS/' file > newfile
Run Code Online (Sandbox Code Playgroud)
您可以将-i开关添加到任何示例以就地编辑文件:
perl -i.bak -ne '/^HERE IT IS/ || print' file
Run Code Online (Sandbox Code Playgroud)(g)awk
awk '!/^HERE IT IS/' file > newfile
Run Code Online (Sandbox Code Playgroud)
GNU 的较新版本(4.1.1 及更高版本)awk(awkLinux 上的默认设置)也可以就地编辑文件:
gawk -i inplace '!/^HERE IT IS/' file
Run Code Online (Sandbox Code Playgroud)Shell ( bash, zsh, ksh, 可能还有其他的). 虽然这有点愚蠢,但它可以完成,但其他工具更好。
while IFS= read -r line; do
[[ $line =~ ^"HERE IT IS" ]] || printf "%s\n" "$line"
done < file > newfile
Run Code Online (Sandbox Code Playgroud)小智 13
我会grep用来过滤掉它们。例如 :
grep -v "^HERE IT IS" infile > outfile
Run Code Online (Sandbox Code Playgroud)
然后将 outfile 移回 infile。
sed 绝对是要走的路。
由于模式引用中的 I ,对@heemayl 命令的这种轻微修改给了您删除该行,无论模式中是否使用相同的大小写。
sed -i '/HERE IT IS/Id' <file>
Run Code Online (Sandbox Code Playgroud)
如果您想在一个目录中有多个文件,您可以像这样将它与 find 结合起来。
find . -maxdepth 1 -type f -exec sed -i.bak '/HERE IT IS/Id' {} +
Run Code Online (Sandbox Code Playgroud)
maxdepth 选项意味着这不会递归到目录中。
| 归档时间: |
|
| 查看次数: |
58838 次 |
| 最近记录: |