Linux文本提取常用命令及用法
在Linux系统中,“Extract”(提取)文本通常指从文件中获取特定内容(如某行、某列、匹配模式的字符串等),常用命令包括grep
、awk
、sed
、cut
等。以下是各命令的具体用法及示例:
grep
是Linux中最常用的文本搜索工具,用于提取文件中匹配指定模式的行。
grep "pattern" filename
info.txt
中提取包含“Phone”的行,命令为grep "Phone" info.txt
,输出结果为Phone:123-456-7890
。-o
:仅输出匹配的部分(而非整行),如grep -o "[0-9]\{3\}-[0-9]\{3\}-[0-9]\{4\}" info.txt
(提取电话号码);-i
:忽略大小写;-r
:递归搜索子目录中的文件。awk
是强大的文本分析工具,适合处理列分隔的文本(如CSV、TSV),可根据列号或条件提取数据。
awk '{print $列号}' filename
(提取指定列);awk '条件 {print $列号}' filename
(按条件提取)。data.txt
(逗号分隔)的第二列:awk -F',' '{print $2}' data.txt
(-F
指定分隔符为逗号);data.txt
中年龄(第二列)大于25的行的姓名(第一列):awk -F',' '$2 > 25 {print $1}' data.txt
,输出Alice
。sed
是流编辑器,适合提取特定行(如某一行、某几行或匹配模式的行)。
sed -n '/pattern/p' filename
(提取匹配模式的行);sed -n '起始行,结束行p' filename
(提取行范围内的内容)。data.txt
中包含“NewYork”的行:sed -n '/NewYork/p' data.txt
,输出John,25,NewYork
;data.txt
的第2行到第3行:sed -n '2,3p' data.txt
(若文件不足3行,则提取到文件末尾)。cut
用于从每行中提取指定的列或字符范围,适合处理简单的列分隔文本。
cut -d'分隔符' -f列号 filename
(按列提取);cut -c起始字符-结束字符 filename
(按字符提取)。data.txt
(空格分隔)的第一列:cut -d' ' -f1 data.txt
,输出John
、Alice
;text.txt
(内容为“HelloWorld”)的前5个字符:cut -c1-5 text.txt
,输出Hello
。通过管道(|
)将多个命令组合,可实现更复杂的文本提取。
data.txt
中提取包含“NewYork”的行,再获取该行的第一列(姓名):grep "NewYork" data.txt | awk -F',' '{print $1}'
,输出John
;info.txt
中提取电话号码(匹配XXX-XXX-XXXX
格式),并去除重复项:grep -oE '[0-9]{3}-[0-9]{3}-[0-9]{4}' info.txt | uniq
(-E
启用扩展正则表达式)。以上命令覆盖了Linux下最常见的文本提取场景,可根据实际需求选择合适的工具或组合。例如,处理列分隔的日志文件用awk
,提取匹配模式的行用grep
,处理简单列用cut
,修改文本内容用sed
。