wb9688 Asked: 2015-06-17 00:13:19 +0800 CST2015-06-17 00:13:19 +0800 CST 2015-06-17 00:13:19 +0800 CST 如何删除包含特定字符串的文件行? 772 如何删除包含“adf.ly”字符串的文件(主机)行? text-processing 6 个回答 Voted Best Answer Maythux 2015-06-17T00:23:18+08:002015-06-17T00:23:18+08:00 使用sed 运行此命令: sed -i '/adf\.ly/d' inputfile man sed -i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied) 使用 grep 感谢@kos 的笔记: grep -v "ad\.fly" inputFile > outputfile Ron 2015-06-17T00:23:14+08:002015-06-17T00:23:14+08:00 以下内容将filename.txt就地删除包含“adf.ly”的行: sed -i '/adf\.ly/d' filename.txt -i在删除行之前使用上面的命令而不对其进行测试。 kos 2015-06-17T01:32:04+08:002015-06-17T01:32:04+08:00 使用awk(感谢 terdon 的缩短版本): < inputfile awk '!/adf\.ly/' > outputfile < inputfile: 重定向到inputfile的awk内容stdin > outputfile: 将 的内容awk重定向stdout到outputfile awk命令分解: !/adf\.ly/adf\.ly:如果不匹配正则表达式则打印记录 使用 Perl(感谢 terdon 的简化版本): < inputfile perl -ne '/adf\.ly/||print' > outputfile -n: 在脚本周围放置一个while (<>) {[...]}循环 -e: 从参数中读取脚本 Perl 命令分解: /: 开始模式 adf\.ly: 匹配一个adf\.ly字符串 /停止模式 ||:仅当模式与行不匹配时才执行以下命令 print: 打印行 heemayl 2015-06-17T04:27:01+08:002015-06-17T04:27:01+08:00 这是一个bash单行: while IFS= read -r i; do [[ ! $i =~ .*adf\.ly.* ]] && echo "$i"; done <file.txt i迭代时变量将包含每一行 [[$i =~ .*adf\.ly.* ]]检查该行是否包含字符串adf.ly,!否定检查,因此[[ ! $i =~ .*adf\.ly.* ]]将检查该行是否不包含adf.ly 如果是 ( &&),则将打印该行。 要将输出保存到另一个文件 ( out.txt): while IFS= read -r i; do [[ ! $i =~ .*adf\.ly.* ]] && echo "$i"; done <file.txt >out.txt evilsoup 2015-06-17T09:46:59+08:002015-06-17T09:46:59+08:00 您可以使用标准文本编辑器ed: printf '%s\n' 'g/adf\.ly/d' w q | ed file.txt Zombo 2016-04-17T07:39:37+08:002016-04-17T07:39:37+08:00 你可以在 Ex 模式下使用 Vim: ex -sc 'g/adf\.ly/d' -cx hosts g全局搜索 d删除 x保存并关闭
使用
sed
运行此命令:
man sed
使用 grep
感谢@kos 的笔记:
以下内容将
filename.txt
就地删除包含“adf.ly”的行:-i
在删除行之前使用上面的命令而不对其进行测试。使用
awk
(感谢 terdon 的缩短版本):< inputfile
: 重定向到inputfile
的awk
内容stdin
> outputfile
: 将 的内容awk
重定向stdout
到outputfile
awk
命令分解:!/adf\.ly/
adf\.ly
:如果不匹配正则表达式则打印记录使用 Perl(感谢 terdon 的简化版本):
-n
: 在脚本周围放置一个while (<>) {[...]}
循环-e
: 从参数中读取脚本Perl 命令分解:
/
: 开始模式adf\.ly
: 匹配一个adf\.ly
字符串/
停止模式||
:仅当模式与行不匹配时才执行以下命令print
: 打印行这是一个
bash
单行:i
迭代时变量将包含每一行[[
$i =~ .*adf\.ly.* ]]
检查该行是否包含字符串adf.ly
,!
否定检查,因此[[ ! $i =~ .*adf\.ly.* ]]
将检查该行是否不包含adf.ly
如果是 (
&&
),则将打印该行。要将输出保存到另一个文件 (
out.txt
):您可以使用标准文本编辑器
ed
:你可以在 Ex 模式下使用 Vim:
g
全局搜索d
删除x
保存并关闭