Linux神器:使用SED过滤时间轻松搞定! (linux sed过滤时间)

Linux神器:使用SED过滤时间轻松搞定!

在日常工作中,我们往往需要处理大量的文本数据。其中,日期和时间这类数据占据了相当重要的比例,比如日志文件中的时间戳、数据处理中的日期筛选、数据匹配中的时间范围过滤等等。但是由于数据量巨大,手动筛选和处理时常会引发疲劳和错误,于是如何快捷高效地以文本处理方式搜索和提取其中的日期和时间成为了一项需求。

Linux操作系统的强大和灵活性使得其成为了一个非常适合进行文本处理的平台,其中SED是不可或缺的一个工具。SED是一种简单但是功能非常强大的流编辑器,它的作用是根据一定的规则对指定的文本进行处理和编辑。在文本处理种类繁多、需求不一的情况下,SED可以根据用户的需要来制定相应的规则,高效地完成文本处理和数据提取的任务,从而极大地提高了工作效率。

在本文中,我们将探讨如何使用SED过滤时间,介绍SED的基础知识和具体操作步骤,以及介绍一些常用的SED规则和应用案例。希望本文能够为读者提供一些有用的提示和指南,帮助大家在日常工作中更加高效地完成文本处理任务。

一、SED基础知识

SED是一款常用的行编辑器,主要用于对文本中的行进行编辑和替换。它支持正则表达式的搜索和替换,可以灵活地处理大量的文本数据。当然在sed处理过程中,我们对正则表达式的理解也是至关重要的。以下是一些在sed中经常用到的正则表达式符号说明:

1. ^:匹配行的开始位置

2. $:匹配行的结束位置

3. .:匹配除了换行符之外的任意一个字符

4. *: 匹配零个或多个在它之前的字符

5. []:匹配其中的任何一个字符

6. \:转义符号,用于表示正则表达式中的特殊字符

以上的这些符号都是sed中常用的正则表达式符号,掌握了它们之后我们就可以开始使用sed命令进行文本处理了。

二、SED过滤时间

1. 过滤指定日期的文本

假设我们有一个文本文件file.txt,其中包含了多行数据,每行数据的格式为“日期 加减时间点”,例如“20230101 120230”,我们希望提取所有2023年1月1日的数据。这时候我们可以使用sed命令中的正则表达式进行匹配。具体来说,可以使用“^20230101”来匹配日期为2023年1月1日的数据,使用“sed -n ‘/^20230101/p’ file.txt”即可。

2. 过滤某个时间点的文本

如果我们只需要提取文本中指定的时间点的数据,我们可以使用sed命令结合正则表达式进行匹配。例如我们需要提取出所有下午1点的数据,可以使用“p.m. 01”进行匹配,然后使用“sed -n ‘/p\.m\. 01/p’ file.txt”即可。

3. 过滤指定时间范围内的文本

有时候我们需要根据时间范围来提取文本数据。例如我们需要提取文件file.txt中20230101到20231231之间的所有数据,可以使用“sed -n ‘/^20230101/,/^20231231/p’ file.txt”命令对文本数据进行提取。

4. 时间格式转换

在日常工作中,我们不仅需要提取时间数据,还可能需要对提取到的时间数据进行格式转换。比如我们提取到了“20230101 120230”这样的数据,如果需要将其转换为2023-01-01 12:00:00这样的格式,可以使用sed命令结合正则表达式进行替换。例如“sed ‘s/\(….\)\(..\)\(..\) \(..\)\(..\)\(..\)/\1-\2-\3 \4:\5:\6/’ file.txt”就可以完成上述任务。

SED提供了一种强大的文本处理工具,尤其在处理时间数据上具有很高的实用价值。它能够帮助我们快速高效地处理文本数据,提取需要的信息,为我们的工作带来极大的便利。当然,要熟练掌握SED也需要我们不断的学习和实践,只有在实践中不断试错,才能让我们的文本处理技巧更加娴熟地应用于我们的实际工作中。

相关问题拓展阅读:

linux shell sed命令用法

s/::RE::/::DT::/::OPTION::

是这个语法…

sed替换命令的结构为: s/A/B/

你在最后少了个斜杠/,结吵冲差构不完整判纳,会报升皮错。

修改为:

A=hello

ar=$(date “+%Y%m%d”)

echo A | sed “s/he/$Var/”

我注意到你结尾脊灶兄忘写樱袭斜杠了。

echo $A |  sed 辩答”s/he/$Var/”

$ echo $A | sed “s/he/$Var/游握孙”

llo

帮你试过了神链皮孝

linux之sed用法

sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。

sed命令行格式为:

sed ‘command’ 输入文本

常用选项:

n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

e∶直接在指令列模式上进行 sed 的动作编辑;

f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;

r∶sed 的动作支援的是延伸型耐嫌正规表示法的语法。(预设是基础正规表示法语法)

i∶直接修改读取的档案内容,而不是由萤幕输出。

常用命令:

a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~

c ∶取代, c 的后面昌历手可以接字串,这些字串可以取代 n1,n2 之间的行!

d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;

i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);

p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~

s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是。

举例:(假设我们有一文件名为ab)

删除某行

# sed ‘1d’ ab#删除之一行

# sed ‘$d’ ab#删除最后一行

# sed ‘1,2d’ ab#删除之一行到第二行

# sed ‘2,$d’ ab#删除第二行到最后一行

  显示某行

. # sed -n ‘1p’ ab#显示之一行

# sed -n ‘$p’ ab#显示最后一行

# sed -n ‘1,2p’ ab#显示之一行到第二行

# sed -n ‘2,$p’ ab#显示第二行到最后一行

  使用模式进行查询

# sed -n ‘/ruby/p’ ab #查询烂悄包括关键字ruby所在所有行

# sed -n ‘/\$/p’ ab#查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义

  增加一行或多行字符串

# cat ab

Hello!

ruby is me,welcome to my blog.

end

# sed ‘1a drink tea’ ab #之一行后增加字符串”drink tea”

Hello!

drink tea

ruby is me,welcome to my blog.

end

# sed ‘1,3a drink tea’ ab #之一行到第三行后增加字符串”drink tea”

Hello!

drink tea

ruby is me,welcome to my blog.

drink tea

end

drink tea

# sed ‘1a drink tea\nor coffee’ ab #之一行后增加多行,使用换行符\n

Hello!

drink tea

or coffee

ruby is me,welcome to my blog.

end

  代替一行或多行

# sed ‘1c Hi’ ab #之一行代替为Hi

Hi

ruby is me,welcome to my blog.

end

# sed ‘1,2c Hi’ ab#之一行到第二行代替为Hi

Hi

end

  替换一行中的某部分

  格式:sed ‘s/要替换的字符串/新的字符串/g’ (要替换的字符串可以用正则表达式)

# sed -n ‘/ruby/p’ ab | sed ‘s/ruby/bird/g’ #替换ruby为bird

  # sed -n ‘/ruby/p’ ab | sed ‘s/ruby//g’#删除ruby

插入

# sed -i ‘$a bye’ ab#在文件ab中最后一行直接输入”bye”

# cat ab

Hello!

ruby is me,welcome to my blog.

end

bye

sed 命令查找与替换:

(1)删除第2,3行:sed ‘2,3d’ test.txt > new.txt

(2)替换:

替换所有:sed ‘s/abc/ABC/’ test.txt >new.txt

查找: sed -n “/abc/p” test.txt

匹配字符串中的一部分: echo abc123 | sed ‘s/\(*\).*/\1/’

echo “ab001_ac” | sed ‘s/\(.*\)\_\(.*\)/\1,\2/’ \1表示之一个括号匹配的字符

echo “ABC01” | sed “s/*\(*\)/\1/”\1匹配后面的数字部分

echo “ab001_AC88” | sed ‘s/*\(*$\)/\1/’

echo “a001_aaST88” | sed “s/\(.*\)\(\)\(*$\)/\2/”

sed “s/^/\”&/” 32.txt 行首添加双引号

sed “s/$/\”&/” 33.txt 行尾添加双引号

sed “s/*$//” 35.txt 替换行尾空格

只显示指定行范围的文件内容,例如:

# 只查看文件的第100行到第200行

sed -n ‘100,200p’ mysql_slow_query.log

sed -n $n”p” 22.txt 显示某一行 n=2

sed大小写转换?

如何先查找,再追加所查找的行到一个新的文件:

(3)查找Tab:

sed “s/\{2,\}/\|/g”查找Tab,查找多空格,单独一个空格的除外

awk ‘/3\t/’ 34.txt 查找\t

sed -n ‘/3>/p’ 34.txt 查找空格

sed “/\\t/p” 34.txt 查找tab

echo “\tabc\t23” | sed ‘s/>/-/’ 替换tab

sed -n ‘/>*/p’ 34.txt 查找tab

如何只替换第2个\t?

(4)

行末空格

sed ‘s/*$//g’

(5)替找空格:

echo “abc 23” | sed ‘s/\{2,\}/ /’ 把多个空格替换成一个空格

(3)

如果你想在每行的80个字符后加一个冒号,你可写:

sed ‘s/./&:/80’ new

你也可以以蛮力解决,如下:

sed ‘s/^……………………………………………………………………../&:/’ new

(4)找一个sed命令在文件每一行加一个变量的例子:

sed ‘s/.*/&-/’ new.txt

用&作为匹配的串

有时你想查找一个模式,然后加上几个字符,比如在匹配的串前后加上括号。如果你是找一个确定的字符串,还是比较简单的,如下即可:

sed ‘s/abc/(abc)/’ new

如果你不是非常清楚你将找到的是串是什么,那你应该如果来利用你找到的串做某种替换呢?

答案就是你需要一个特定的字符”&”,它即指代匹配的模式

sed ‘s/*/(&)/’ new

你可以在替换时多次使用”&”,比如,你可以次每行开头的数字复制一次,如下:

% echo “123 abc” | sed ‘s/*/& &/’

abc

让我再修正一下这个例子,sed会以贪婪的方式匹配之一个串。对于’*’的之一个区配是之一个字符,因为这个正则是匹配0个或多个数字。所以如果输入是”abc 123”,输出也不会改变(当然,除了有一个空格在字母之前)。一个能保证能匹配一个数字的更好的复制数字的方法是:

% echo “123 abc” | sed ‘s/*/& &/’

abc

(5)sed 中如何使用变量(变量使用单引号包起来):

echo “abc” | sed ‘s/ab/’$v’/’

如何在文件的每一行的最前面加一个字符串和空格!

sed ‘s/^/ttt /g’ test

如何在文件的每一行的最前面加一个字符串和空格!

sed ‘s/^/ttt /g tese | sed ‘s/$/ sss\&/g’

如何在文件的每一行的最前面加一个字符串和空格!

sed ‘s/^/ttt /g tese | sed ‘s/$/ sss\&/g’

(7)匹配空行:

查找空行:sed -n “/^$/p” 20.txt

删除空行:sed “/^$/d” 21.txt

n 不打印; sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑),p命令可以用来打印编辑行

c 下一命令是编辑命令,使用多项编辑时加入此选项

f 如果正在调用sed脚本文件,使用此选项,此选项通知sed一个脚本文件支持所用的sed命令,如

sed -f myscript.sed input_file 这里myscript.sed即为支持sed命令的文件

(21) 只显示指定行范围的文件内容,例如:

# 只查看文件的第100行到第200行

sed -n ‘100,200p’ mysql_slow_query.log

(22)退出状态

sed不向grep一样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。

(23)y命令

该命令与UNIX/Linux中的tr命令类似,字符按照一对一的方式从左到右进行转换。例如,y/abc/ABC/将把所有小写的a转换成A,小写的b转换成B,小写的c转换成C。

sed ‘1,20y/hrwang12/HRWANG^$/’ datafile

#将1到20行内,所有的小写hrwang转换成大写,将1转换成^,将2转换成$。

#正则表达式元字符对y命令不起作用。与s命令的分隔符一样,斜线可以被替换成其它的字符。

(24)% echo “123 abc” | sed ‘s/*/& &/’

abc

字符串”abc”没有改变,因为它没有匹配正则表达式,如果你想在输出中删除”abc”,你必须扩展正则表达式来匹配行的其它的部分,并显式地用”(”,”)”和”\1”来指名,这就是下节的内容了。

用\1来指明匹配的部分

我已经在正则表达式那一章中介绍了”(” ”)”和”\1”的用法。现在复习一下,被转义的括号(即,有反斜杠在前面的括号)来记录正则表达的某一部分。”\1”是被记录的之一个模式,”\2”是第二个被记录的模式。Sed可以记录9个模式。

如果你想保存每行的之一个单词,并删除行的其它部分,你可以用下面的命令:

sed ‘s/\(\*).*/\1/’

我应该再详细地解释一下。正则表达式是以贪婪的方式匹配。”*”匹配0个或多个小写字母,它会尽量匹配更多的小写字母。”.*”会在之一个匹配后匹配0个或多个字符。因为之一个模式已经匹配了所有的小写字母,第二个模式会匹配剩下的字符,所以你使用命令:

echo abcd123 | sed ‘s/\(*\).*/\1/’

会输出”abcd”,而删除后面的数字。

如果你想调换两个单词的位置,你可记录两个模式,并改变它们的次序。

sed ‘s/\(*\) \(*\)/\2 \1/’

注意两个模式中间是有空格的。这个可保证找到两个单词。但是*这种模式会匹配0个字母,如果你想至少匹配一个字母,你可以用下面的命令:

sed ‘s/\(*\) \(*\)/\2 \1/’

“\1”并不需要一定出现在替换串中(右部),它你也可以在查找的模式中(左部)。如果你想删除重复的单词,你可以用:

sed ‘s/\(*\) \1/\1/’

Linux sed命令使用!

# sed

选项与参数:

-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e :直接在命令列模式上进码轿行 sed 的动作编辑;

-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;

-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

-i :直接修改读森激取的文件内容,而不是输出到终端。

动作说明: >function

n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20 』

function:

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的此模袜下一行)~

linux sed过滤时间的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux sed过滤时间,Linux神器:使用SED过滤时间轻松搞定!,linux shell sed命令用法,Linux sed命令使用!的信息别忘了在本站进行查找喔。


数据运维技术 » Linux神器:使用SED过滤时间轻松搞定! (linux sed过滤时间)