在包含许多行的文件中,我要删除以开头的行HERE IT IS
。
如何仅使用命令行工具执行此操作?
@Doorknob,谢谢您指出这一点。实际上,我正在使用vim
—
micgeronimo 2015年
在包含许多行的文件中,我要删除以开头的行HERE IT IS
。
如何仅使用命令行工具执行此操作?
Answers:
尝试sed
:
sed -i '/^HERE IT IS/d' <file>
警告:使用以下-i
开关时最好备份sed
:
sed -i.bak '/^HERE IT IS/d' <file>
原始文件将保留为<file>.bak
,修改后的文件将为<file>
。
sed -i 's/^HERE IT IS/HERE IT IS\n/' <file>
sed '/^HERE IT IS/G' file
。
除了很好的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
(awk
Linux上的默认设置)也可以就地编辑文件:
gawk -i inplace '!/^HERE IT IS/' file
壳牌(bash
,zsh
,ksh
,可能其他人)。虽然这很愚蠢,但是可以做到,但是其他工具更好。
while IFS= read -r line; do
[[ $line =~ ^"HERE IT IS" ]] || printf "%s\n" "$line"
done < file > newfile
bash
使我大声笑)
printf "%s\n" "$line"
:引用$ line保留空白,并避免一些回声问题(解释特殊字符等)。并且避免了也添加--
。
IFS=
和-r
,所以我可能会一直进行并使其健壮。
格列普
grep -P '^(?!HERE IT IS)' file
(?!HERE IT IS)
否定超前断言,使正则表达式引擎匹配所有行的起始边界(通常由^
仅在其后没有字符串时才)HERE IT IS
蟒蛇
#!/usr/bin/python3
import sys
fil = sys.argv[1]
with open(fil) as f:
for line in f:
if not line.startswith('HERE IT IS'):
print(line, end="")
将脚本保存在一个文件中,script.py
然后说,然后在终端上通过以下命令运行它。
python3 script.py infile
[print(l, end = "") for l in open(fil).readlines() if not re.match("HERE IT IS", l)]
,但效率不比得多startswith
。我想知道如何[print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]
不会在列表中产生输出。
vim
:vim '+g/^HERE IT IS/d' +wq test.txt
;)