Linux文本提取常用命令及用法
在Linux系统中,“Extract”(提取)文本通常指从文件中获取特定内容(如某行、某列、匹配模式的字符串等),常用命令包括grep、awk、sed、cut等。以下是各命令的具体用法及示例:
grep是Linux中最常用的文本搜索工具,用于提取文件中匹配指定模式的行。
grep "pattern" filenameinfo.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。