最近的工作中需要在shell中用命令对一个文本的内容进行处理,前提是忽略文本的第一行,只处理其他行。思考之下发现tail、awk和sed这三个命令均可以实现这一功能,故在此做下记录。
下面就来具体说明下如何使用上述三个命令进行操作。
-
使用tail命令的
-n
参数
tail命令的
-n
参数用来显示文本的最后k行,例如,要显示最后5行,可以使用
seq 1 10|tail -n 5
6
7
8
9
10
在-n的参数值前加上+
,用来显示从第k行到最后一行的内容
seq 1 10|tail -n +5
5
6
7
8
9
10
所以,要只显示除过第一行的其他所有行,可以指定参数-n +2
,如下所示:
head -n +2 your_file
-
使用awk命令的内置变量NR或者FNR
在awk命令中,内部变量
NR
用来表示文件中已处理的输入记录数,内部变量
FNR
用来表示当前文件中已处理的记录数。
当要处理的文件只有一个时,FNR和NR的作用相同。
所以,要只显示除过第一行的其他所有行,可以指定
NR!=1
或者
FNR!=1
即可,如下所示:
awk 'NR!=1 { print }' your_file
或者
awk 'FNR!=1 { print }' your_file
-
使用sed的-n参数和p替换标记或者使用删除命令
3.1
使用
-n
参数和
p
标记
sed命令的
-n
参数的作用是使sed命令不产生输出。
sed的替换命令中
p
标记的作用是打印与替换命令中指定的模式匹配的行。
-n
参数和
p
标记结合使用,就可以打印出与指定模式匹配的行。
所以,要只显示除过第一行的其他所有行,只需要打印从第二行到最后一行即可,行区间可以用
2,$
表示,
其中
$
表示最后一行。
sed -n '2,$p' your_file
也可以直接指定不需要打印的行,使用
1!p
表示,如下所示:
sed -n '1!p' your_file
3.2
使用删除命令
d
sed的删除命令
d
,通过指定行区间,用来删除文本流中的特定行。
所以,只要从文本内容中删除第一行而打印出其他行即可即可,如下所示:
sed '1d' your_file
[字,味精] = LE_printViaWord(文件名)
该函数启动 Word COM 服务器,打开并打印给定的文件。
COM 服务器句柄作为第一个输出参数 (Word) 返回,建议用户通过在 MATLAB 命令窗口中键入 Quit(Word) 退出服务器。
调用不带输入参数的函数允许用户选择文件。
使用示例: [字,味精] = LE_printViaWord; 退出(字)
请阅读帮助文本。
这是我为人们用 JavaScript 编写自己的 REPL 编写的一个小型教学工具。
克隆存储库并在浏览器中打开index.html 。 你会看到一个终端。 此终端的默认行为在main.js定义。 它会简单地使用println命令回显您输入的任何内容,除非您输入“img ”,在这种情况下它会输出一个图像。 您可以编辑main.js文件以更改终端的行为。
应用程序接口
每当用户在提示下输入内容时, handleInput函数将被调用并传递用户的输入。 它可以重新分配给另一个函数(有关此示例,请参见main.js第 13 行)。
println函数接受一个参数,并将该参数打印到控制台。 参数可以是字符串或 HTML 节点。
有用的文档
您可能会发现以下 JavaScript 功能很有用:
- 允许您将字符串与正则表达式进行匹配。
sed找到关键字所在行并将其前面的第一个字符删除:
代码如下:sed -i ‘/httpd-vhosts/s/^#//’ httpd.conf#Include conf/extra/httpd-vhosts.conf
说明:以 httpd-vhosts 为关键字找到这行,并将前面的第一个字符删掉,即将#删掉。
您可能感兴趣的文章:查看某时间段到现在的系统日志的sed命令linux之sed命令的用法一天一个shell命令 linux文本内容操作系列-sed命令详解linux中sed命令的使用与注意小结
sed是stream editor(流编辑器)的缩写。它能够完美匹配正则表达式。sed和awk是文件编辑最重要的两个命令了。尤其涉及到了很多正则表达式的问题,笔者不敢也有点犯怵,试着写写。
1.替换文件中的字符串
$sed -i ‘s/text/replace/g’ file
#如果不加g结尾,则替换每一行的第一个
#如果只是打印,去掉-i
2.忽略前N处匹配,从N+1出开始替换
$sed -i ‘s/text/replace/2g’ file
#在g前面加入数字N
3.移除空白符
$sed ‘/^$/d’ file
4.标记已匹配的内容
$echo this is an ex
在做数据分析式如果给到的原数据是文本格式,在数据中经常会有如下情况的:
数据中的第一行是我们分析所不需要的,我们需要删除第一行的数据。用到的shell命令为:sed -i '1d' txtfilename(sed -i表示将改动直接写入到原文件里)。
如果我们有成批量的这样的数据,用到的命令为:for i in `ls`; do sed -i '1
sed 是文本处理工具,读取文本内容,根据指定的条件进行处理,如删除、替换、添加等;可在无交互的情况下实现相当复杂的文本处理操作工作原理:读取👉执行👉显示读取:sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区(又称模式空间,pattern space)执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
删除文件中包含某个关键字开头的所有行:sed -i '/^QWQ/d' <file>删除文件中的某一行:sed -i '3d' <file> --以第3行为例。删除文件中包含某个关键字的所有行:sed -i '/QWQ/d' <file>读取文件的最后一行: tail -n -1 file.txt。读取文件的第一行:head -n +1 file.txt。删除文档的最后一行:sed -i '$d' <file>删除文档的第一行:sed -i '1d' <file>
比较文件的方法:
1)comm -3 --nocheck-order file1 file2
2) grep -v -f file1 file2: 输出file2中有file1中没有的行
diff file1 file2...