在一个包含很多行的文件中,我想删除以 开头的行HERE IT IS
。
我怎样才能仅使用命令行工具来完成此操作?
答案1
尝试sed
:
sed -i '/^HERE IT IS/d' <file>
警告:-i
使用以下开关时最好进行备份sed
:
sed -i.bak '/^HERE IT IS/d' <file>
原始文件将保留原样<file>.bak
,而修改后的文件将是<file>
。
答案2
除了您收到的非常好的答案之外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
您可以将
-i
开关添加到任何示例中以就地编辑文件:perl -i.bak -ne '/^HERE IT IS/ || print' file
(g)awk
awk '!/^HERE IT IS/' file > newfile
GNU 的较新版本(4.1.1 及更高版本)
awk
(Linux 上的默认版本awk
)也可以就地编辑该文件:gawk -i inplace '!/^HERE IT IS/' file
Shell(
bash
、zsh
、ksh
可能还有其他)。不过这有点傻,它能但其他工具更好。while IFS= read -r line; do [[ $line =~ ^"HERE IT IS" ]] || printf "%s\n" "$line" done < file > newfile
答案3
我会用grep
它们来过滤掉。例如:
grep -v "^HERE IT IS" infile > outfile
然后将 outfile 移回到 infile。
答案4
另一个python选项:
#!/usr/bin/env python3
[print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]
其中 f 是文件的路径,位于引号之间。