Sie*_*geX 2568
要删除该行并将输出打印到标准输出:
sed '/pattern to match/d' ./infile
Run Code Online (Sandbox Code Playgroud)
要直接修改文件:
sed -i '/pattern to match/d' ./infile
Run Code Online (Sandbox Code Playgroud)
要直接修改文件(并创建备份):
sed -i '' '/pattern to match/d' ./infile
Run Code Online (Sandbox Code Playgroud)
对于Mac OS X和FreeBSD用户:
sed -i.bak '/pattern to match/d' ./infile
Run Code Online (Sandbox Code Playgroud)
kur*_*umi 603
还有许多其他方法可以删除具有特定字符串的行sed:
awk '!/pattern/' file > temp && mv temp file
Run Code Online (Sandbox Code Playgroud)
ruby -i.bak -ne 'print if not /test/' file
Run Code Online (Sandbox Code Playgroud)
perl -ni.bak -e "print unless /pattern/" file
Run Code Online (Sandbox Code Playgroud)
while read -r line
do
[[ ! $line =~ pattern ]] && echo "$line"
done <file > o
mv o file
Run Code Online (Sandbox Code Playgroud)
grep -v "pattern" file > temp && mv temp file
Run Code Online (Sandbox Code Playgroud)
当然sed(打印反转比实际删除更快):
sed -n '/pattern/!p' file
Run Code Online (Sandbox Code Playgroud)
sla*_*tir 237
您可以使用sed替换文件中的行.但是,它似乎比使用grep将逆转换为第二个文件然后将第二个文件移动到原始文件上要慢得多.
例如
sed -i '/pattern/d' filename
Run Code Online (Sandbox Code Playgroud)
要么
grep -v "pattern" filename > filename2; mv filename2 filename
Run Code Online (Sandbox Code Playgroud)
无论如何,第一个命令在我的机器上花费的时间要长3倍.
Kev*_*yen 68
使用GNU的简单方法sed:
sed --in-place '/some string here/d' yourfile
Run Code Online (Sandbox Code Playgroud)
ken*_*orb 34
您可以考虑使用ex(这是一个标准的基于Unix命令的编辑器):
ex +g/match/d -cwq file
Run Code Online (Sandbox Code Playgroud)
哪里:
+执行Ex命令(man ex),-c执行相同wq(写入和退出)g/match/d- 删除给定行的Ex命令match,参见:g的幂上面的示例是一个POSIX兼容的方法,用于根据Unix.SE和POSIX规范中的ex这篇文章就地编辑文件.
不同之sed处在于:
sed是一个S tream ED itor ,而不是文件编辑器.BashFAQ
除非您喜欢不可移植的代码,I/O开销和一些其他不良副作用.所以基本上一些参数(例如就地/ -i)是非标准的FreeBSD扩展,可能在其他操作系统上不可用.
djp*_*lta 16
从所有文件中删除匹配的行
grep -rl 'text_to_search' . | xargs sed -i '/text_to_search/d'
Run Code Online (Sandbox Code Playgroud)
Jad*_*zia 14
我用一个包含大约345 000行的文件做了一个小基准测试.这种方式grep似乎比sed这种情况下的方法快15倍左右.
无论有没有设置LC_ALL = C我都尝试过,它似乎没有显着改变时间.搜索字符串(CDGA_00004.pdbqt.gz.tar)位于文件中间的某个位置.
以下是命令和时间:
time sed -i "/CDGA_00004.pdbqt.gz.tar/d" /tmp/input.txt
real 0m0.711s
user 0m0.179s
sys 0m0.530s
time perl -ni -e 'print unless /CDGA_00004.pdbqt.gz.tar/' /tmp/input.txt
real 0m0.105s
user 0m0.088s
sys 0m0.016s
time (grep -v CDGA_00004.pdbqt.gz.tar /tmp/input.txt > /tmp/input.tmp; mv /tmp/input.tmp /tmp/input.txt )
real 0m0.046s
user 0m0.014s
sys 0m0.019s
Run Code Online (Sandbox Code Playgroud)
Bhu*_*esh 12
你也可以用这个:
grep -v 'pattern' filename
Run Code Online (Sandbox Code Playgroud)
这里-v只打印您的图案以外的其他图案(表示反转匹配).
Jah*_*hid 12
要获得类似结果,grep可以执行以下操作:
echo "$(grep -v "pattern" filename)" >filename
Run Code Online (Sandbox Code Playgroud)
小智 7
您还可以删除文件中的一系列行。例如删除 SQL 文件中的存储过程。
sed '/CREATE PROCEDURE.*/,/END ;/d' sqllines.sql
这将删除 CREATE PROCEDURE 和 END ; 之间的所有行。
我已经用这个 sed 命令清理了许多 sql 文件。
perl -i -nle'/regexp/||print' file1 file2 file3
perl -i.bk -nle'/regexp/||print' file1 file2 file3
Run Code Online (Sandbox Code Playgroud)
第一个命令就地编辑文件 (-i)。
第二个命令执行相同的操作,但通过将 .bk 添加到文件名(.bk 可以更改为任何内容)来保留原始文件的副本或备份。
| 归档时间: |
|
| 查看次数: |
1684570 次 |
| 最近记录: |