Linux脚本攻略学习笔记之cut、sed演示

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whandgdh/article/details/85157126

一、cut

1.1、-f
要提取特定的字段或列,可以使用下面的语法
cut -f FIELD_LIST filename
FIELD_LIST 是需要显示的列。它由列号组成,彼此之间用逗号分隔。例如:
cut -f 2,3 filename
这条命令将显示第2列和第3列
创建文本 注意这里1列和2 列之间不是空白 ,而是制表符,表示定界符
制表符是字段或列的默认定界符
在这里插入图片描述

cut -f 2,3 cut_f_test

在这里插入图片描述

提取一列
在这里插入图片描述

1.2 从stdin中读取

cat  cut_f_test  | cut -f 4

在这里插入图片描述

1.3、–complement

cut -f1  --complement  cut_f_test

表示打印除了第一列之外的所有列
在这里插入图片描述
1.4 -d
要指定字段的定界符,使用 -d 选项
来看如下文本
在这里插入图片描述
这里是是空格。
cut -f4 -d " " cut_s_test
在这里插入图片描述

1.5、指定字段的字符和字节范围

N- 从第N个字节,字符或字段到行尾
N-M 从第N个字节,字符或字段到第M个(包括第M个在内)字节、字符或字段
-M 第1个字节,字符或字段到第M个(包括第M个在内)字节、字符或字段
-b 表示字节;
 -c 表示字符;
 -f 用于定义字段
测试文本:
在这里插入图片描述

打印1-5个字符
cut -c1-5 range_fields.txt
在这里插入图片描述
打印前2个字符
在这里插入图片描述
当提取多个字段时必须使用 --output-delimiter ,否则,你就没法区分不同的字段了

cut -c-3,6-9 --output-delimiter "," range_fields.txt 

在这里插入图片描述

二、sed

sed 是流编辑器(stream editor)的缩写。它是文本处理中不可或缺的工具,能够配合正则表
达式使用,功能不同凡响。 sed 命令众所周知的一个用法是进行文本替换

2.1 不带选项

语法 sed ‘s/pattern/replace_string/’ file # pattern 支持 正则表达式
实例演示
在这里插入图片描述
sed 替换set_test.txt 文本中的数字为空格,并打印出来

sed 's/[0-9]\+/ /'  set_test.txt

在这里插入图片描述

2.2、替换并保存

注意sed 默认不会保存修改源文件
如果需要保存则需要,保存到另外一个文件,再重命名即可

sed 's/[0-9]\+/ /'  set_test.txt  >replace.txt

在这里插入图片描述
当然最简单的还是 -i选项

sed -i 's/[0-9]\+/ /'  set_test.txt 

在这里插入图片描述

2.3、-g 替换所有行

之前看到的 sed 命令会将每一行中第一处符合模式的内容替换掉。但是如果要替换所
有内容,我们需要在命令尾部加上参数 g

echo -e "hello  123  123 world  \n hello 123 world" | sed 's/[0-9]\+/ /'

在这里插入图片描述
替换所有

echo -e "hello  123  123 world  \n hello 123 world" | sed 's/[0-9]\+/ /g'

在这里插入图片描述
后缀 /g 意味着 sed 会替换每一处匹配。但是有时候我们只需要从第n处匹配开始替
换。对此,可以使用 /Ng 选项
从第二出开始替换

    echo hello123hello123hello123 | sed 's/[0-9]\+/ /2g'

在这里插入图片描述

2.4、定界符

在上面的例子中字符 / 在 sed 中被作为定界符使用。我们可以像下面一样使用任意的定界符:
sed ‘s:text:replace:g’
sed ‘s|text|replace|g’
当定界符出现在样式内部时,我们必须用前缀 \ 对它进行转义:

sed 's|te\|xt|replace|g'

| 是一个出现在样式内部并经过转义的定界符

echo hello123world  | sed 's|[0-9]\+| |'

在这里插入图片描述

2.5、 移除空白行

测试文本
在这里插入图片描述

sed  -i '/^$/d' delete_blank.txt

空白行可以用正则表达式 ^$ 进行匹配
在空白行中,行尾标记紧随着行首标记
在这里插入图片描述

2.6、&

& 标记匹配样式的字符串

echo hello 123 world | sed 's/[0-9]\+[&]/g' 

在这里插入图片描述

2.7、子串匹配标记

(pattern) 用于匹配子串。模式被包
括在使用斜线转义过的 () 中。对于匹配到的第一个子串,其对应的标记是 \1 ,匹配到的第二个
子串是 \2

echo  "one TWO " | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'

这里 \1 表示one \2表示 TWO
在这里插入图片描述

2.8、向后引用

echo hello WORLD | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'

在这里插入图片描述
([a-z]+) 匹配第一个单词, ([A-Z]+) 匹配第二个单词。 \1 和 \2 用来引用它们。这种引用
被称为向后引用(back reference)。在替换部分,它们的次序被更改为 \2 \1 ,因此结果就呈现
出逆序的形式

2.9、组合多个表达式

sed ‘expression’ | sed ‘expression’
它等价于
$ sed ‘expression; expression’
或者
$ sed -e ‘expression’ -e expression’

echo  abc | sed 's/a/A/' | sed 's/c/C/'

在这里插入图片描述

echo  abc | sed 's/a/A/' ;sed 's/c/C/'

在这里插入图片描述

echo  abc | sed -e 's/a/A/' -e  's/c/C/'

在这里插入图片描述

2.10、使用双引号引用

ed 表达式通常用单引号来引用。不过也可以使用双引号。双引号会通过对表达式求值来对
其进行扩展。当我们想在 sed 表达式中使用一些变量时,双引号就能派上用场了

text=hello
echo 123 world | sed "s/[0-9]\+/$text/"

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/whandgdh/article/details/85157126
今日推荐