美文网首页
Linux 如何使用Sed命令进行文本处理 2022-07-18

Linux 如何使用Sed命令进行文本处理 2022-07-18

作者: 一车小面包人 | 来源:发表于2022-07-17 17:27 被阅读0次

    使用cat查看测试文件内容:

    $cat test.txt
    this is a test
    1line
    2line
    
    sed [-nefr] [操作]
    

    选项[-nefr]

    -n sed命令在对文本进行处理后,会默认把处理过的文本标准输出到屏幕上,使用-n命令可以只输出文本中被处理过的行。
    exp:

    1.sed -n '/带匹配字符/p' 文件名

    $sed '/a/p' test.txt
    this is a test
    this is a test
    1line
    2line
    $sed -n '/a/p' test.txt
    this is a test
    

    p代表的是print:打印文本中的每一行内容和/带匹配字符/中匹配到的内容;/a/代表匹配包含a的行;
    因此默认会输出文本的所有行和匹配到的包含a的行,即包含a的行会输出两次;
    但如果加上-n,就会仅打印匹配到包含a的行。

    -e 直接在命令模式上进行sed的操作编辑,可以在一行执行多条命令。

    $sed -e '1,2p' -e '1,2athis is a new line' test.txt
    

    -f 直接将sed的操作写在一个文件夹内。
    -r 代表使用扩展正则表达式的语法。

    2.-r 扩展正则表达式

    + 一个或者多个
    ? 0个或者一个
    | 用或(or)的方法找出整个字符串
    () 捕获
    ()+ 捕获的重复

    $sed 's/\([0-9]\)\([a-z]\)/\1\t\2/g' test.txt   #在数字与字母间插入tab
    this a test
    1  line
    2  line
    $sed -r 's/([0-9])([a-z])/\1\t\2/g' test.txt   #使用扩展正则,()不要\转义
    this a test
    1  line
    2  line
    

    -i 直接修改读取的文件内容,而不是由屏幕输出。

    [操作]说明

    '[n1,{n2}] function' #sed 执行的操作需要放在单引号之中
    n1,n2 不一定会存在,代表操作的行数。
    function包括:

    a 新增,a的后面接字符,这些字符会出现在目前行的下一行。

    3.新增多行内容

    $sed '1,2athis is a new line' test.txt   #在第1/2行之后新加一行内容
    this is a test
    this is a new line
    1line
    this is a new line
    2line
    $sed '1,2athis is a new line\
    >this is another new line' test.txt   #新加多行内容:反斜杠回车后继续写
    this is a test
    this is a new line
    this is another new line
    1line
    this is a new line
    this is another new line
    2line
    

    c 替换,c的后面接字符,这些字符会替换n1,n2行之间的内容。
    d 删除。
    i 插入,i后面接字符,这些字符会插入到当前行的上一行。
    p 打印。
    s 替换。

    相关文章

      网友评论

          本文标题:Linux 如何使用Sed命令进行文本处理 2022-07-18

          本文链接:https://www.haomeiwen.com/subject/mfqdirtx.html