bjlhx

文本处理

1、sed 使用

替换

1.1、s参数

  后面跟的是分隔符,原字符串可使用.*这种正则表达式进行整行替换

sed \'s/原字符串/替换字符串/\'

  这里的三个 “/”可以替换其他字符,如# ,?等,有时替换路径,使用/可能会冲突,就可以使用# 等

sed "s/原字符串包含\'/替换字符串包含\'/" //要处理的字符包含单引号

可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个匹配的

示例

1、sed \'s/stringa1/stringa2/g\' example.txt 将example.txt文件中的stringa1全部替换成stringa2【没修改文件

  这种方式,其实并没有修改文件的内容。如果想保存修改,通常的做法就需要重定向到另外的一个文件:sed \'s/stringa1/stringa2/g\' example.txt>example.txt.tmp

  这样,example.txt.tmp文件就是修改后的文件.如果无误,那么就可以用 mv example.txt.tmp example.txt 覆盖原文件。

  如果想直接修改源文件,而没有这样的过程,可以用下面的命令: sed -i \'s/stringa1/stringa2/g\' example.txt  这样,就直接修改了example.txt文件 【-i 修改原文件

  还有一个更简单的方法 : sed -in-place -e \'s/stringa1/stringa2/g\' example.txt 

1.2、行尾

  上箭头”^”表示行首,

  美元”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行),

例如:

sed \'s/^/添加的头部&/g\' //在所有行首添加
sed \'s/$/&添加的尾部/g\' //在所有行末添加
sed \'2s/原字符串/替换字符串/g\' //替换第2行
sed \'$s/原字符串/替换字符串/g\' //替换最后一行
sed \'2,5s/原字符串/替换字符串/g\' //替换2到5行
sed \'2,$s/原字符串/替换字符串/g\' //替换2到最后一行

1.3、多个替换

替换样式可以多个在同一条命令中执行,用分号”;”分隔,例如:

sed \'s/^/添加的头部&/g;s/$/&添加的尾部/g\' //同时执行两个替换规则

1.4、文件内替换

sed处理过的输出是直接输出到屏幕上的,要保存可以将输出重定向,或者使用参数”i”直接在文件中替换:

sed -i \'s/原字符串/替换字符串/g\' filename //替换文件中的所有匹配项

1.5、Sed里使用变量

1 eval sed \'s/$a/$b/\' filename
2 sed "s/$a/$b/" filename
3 .sed \'s/\'$a\'/\'$b\'/\' filename
4 .sed s/$a/$b/ filename

更多示例

sed \'/^$/d\' example.txt 从example.txt文件中删除所有空白行
sed \'/*#/d;/^$/d\' example.txt 从example.txt文件中删除所有注释和空白行
echo \'esempio\' | tr \'[:lower:]\' \'[:upper:]\' 合并上下单元格内容
sed -e \'ld\' result.txt 从文件中排除第一行
sed -n \'/stringa1/p\' 查看只包含词汇 stringa1 的行
sed -e \'s/*$//\' example.txt 删除每行最后的空白字符
sed -e \'s/stringa1//g\' example.txt 从文档中只删除词汇 stringa1 并保留剩余全部
sed -n \'1,5p;5q\' example.txt 查看从第一行到底5行内容
sed -n \'5p;5q\' example.txt 查看第5行
sed -e \'s/00*/0/g\' example.txt 用单个0替换多个00

cat -n file1标示文件行数

cat example.txt |awk \'NR%2==1\' 删除文件中的所有偶数行

cat file1|command(sed,grep,awk,) > result.txt 合并一个文件的详细说明文本,并将简介写入一个新文件中

cat file1|command(sed,grep,awk,) >> result.txt 合并一个文件的详细说明文本,并将简介写入一个已有的文件中

grep Aug file1 在文件中查找关键词 ‘Aug’

grep ^Aug file1 在文件中查找关键词 ‘Aug’开始的词汇

grep [0-9] file1 在文件中查找所有包含数字的行

grep Aug -R /var/log/* 在目录‘/var/log’ 及随后的目录中搜搜字符串Aug

echo a b c |awk \'{pring $1}\' 查看一行第一栏

echo a b c |awk \'{pring $1,$3}\' 查看一行第一和第三栏

paste file1 file2 合并两个文件或量栏的内容

paste -d ‘+’ file1 file2  合并两个文件或量栏的内容,中间用+区分

sort file1 file2 排序两个文件内容

sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) 

sort file1 file2 | uniq -u 删除交集,留下其他的行

sort file1 file2 | uniq -d 取出两个文件的交集

comm -1 file1 file2 比较两个文件的内容只删除 ‘file1’所包含的内容

comm -2 file1 file2 比较两个文件的内容只删除 ‘file2’所包含的内容

comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分

 

分类:

技术点:

相关文章: