Sed:修订间差异

来自牛奶河Wiki
跳到导航 跳到搜索
(创建页面,内容为“<nowiki>#</nowiki>删除行 sed '1d' sed '1,3d' sed '1d;3d' <nowiki>#</nowiki>删除空行 sed '/^$/d' <nowiki>#</nowiki>删除含有空格的空行 sed '/^ *$/d' <nowiki>#</nowiki>删除行尾空格 sed -e 's/[ ]*$//g' <nowiki>#</nowiki>删除行首空格 sed 's/^[ \t]*//g'? --显示某一行 sed -n '1,3p;5p' # 输出1,2,3,5 sed -n '1639924,1p' tw1_bht_00_001.txt # 输出第1639924行 <nowiki>#</nowiki>monitor df -m |sed '1d'|awk '{print $2,$3,…”)
 
无编辑摘要
第1行: 第1行:
<nowiki>#</nowiki>删除行
===删除===


sed '1d'
====删除行====
*sed '1d'         # 删除第一行
*sed '1,3d'        # 删除第一、二、三行
*sed '1d;3d'      # 删除第一、三行


sed '1,3d'
====删除空行====
*sed '/^$/d'       # 删除空行
*sed '/^ *$/d'    <nowiki>#</nowiki> 删除含有空格的空行


sed '1d;3d'
====删除空格====
*sed -e 's/[ ]*$//g'   <nowiki>#</nowiki> 删除行尾空格
*sed 's/^[ \t]*//g'?  <nowiki>#</nowiki> 删除行首空格


<nowiki>#</nowiki>删除空行
===显示某一行===
*sed -n '1,3p;5p'        # 输出1,2,3,5
*sed -n '1639924,1p'      # 输出第1639924行


sed '/^$/d'
===替换===
sed "s/原字符串/替换字符串/"      # 一般用单引号,用双引号的好处是可以做变量替换
PA=$(echo -ne '\001')
cat bank.csv | sed "s/,/$PA/" > bank.hive          # PA=OX001


<nowiki>#</nowiki>删除含有空格的空行


sed '/^ *$/d'


<nowiki>#</nowiki>删除行尾空格
monitor
 
sed -e 's/[ ]*$//g'
 
<nowiki>#</nowiki>删除行首空格
 
sed 's/^[ \t]*//g'?
 
--显示某一行
 
sed -n '1,3p;5p' # 输出1,2,3,5
 
sed -n '1639924,1p' tw1_bht_00_001.txt # 输出第1639924行
 
<nowiki>#</nowiki>monitor


df -m |sed '1d'|awk '{print $2,$3,$4,$5,$6,$7,$8}'|sed '/^ *$/d'|sed -e 's/[ ]*$//g'|sed 's/ /-/g'
df -m |sed '1d'|awk '{print $2,$3,$4,$5,$6,$7,$8}'|sed '/^ *$/d'|sed -e 's/[ ]*$//g'|sed 's/ /-/g'

2023年2月14日 (二) 10:28的版本

删除

删除行

  • sed '1d' # 删除第一行
  • sed '1,3d' # 删除第一、二、三行
  • sed '1d;3d' # 删除第一、三行

删除空行

  • sed '/^$/d' # 删除空行
  • sed '/^ *$/d' # 删除含有空格的空行

删除空格

  • sed -e 's/[ ]*$//g' # 删除行尾空格
  • sed 's/^[ \t]*//g'? # 删除行首空格

显示某一行

  • sed -n '1,3p;5p' # 输出1,2,3,5
  • sed -n '1639924,1p' # 输出第1639924行

替换

sed "s/原字符串/替换字符串/" # 一般用单引号,用双引号的好处是可以做变量替换

PA=$(echo -ne '\001')
cat bank.csv | sed "s/,/$PA/" > bank.hive           # PA=OX001


monitor

df -m |sed '1d'|awk '{print $2,$3,$4,$5,$6,$7,$8}'|sed '/^ *$/d'|sed -e 's/[ ]*$//g'|sed 's/ /-/g'

vmstat 1 2 |sed '1,3d'|awk '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18}'|sed 's/ /;/g'

#多行合并成一行

1. 采用awk

    awk BEGIN{RS=EOF}'{gsub(/\n/," ");print}' file

    说明:awk默认将记录分隔符(record separator即RS)设置为\n,此行代码将RS设置为EOF(文件结束),也就是把文件视为一个记录,然后通过gsub函数将\n替换成空格,最后输出。

2. 采用sed

    sed ':a ; N;s/\n/ / ; t a ; ' file

    说明:sed默认只按行处理,N可以让其读入下一行,再对\n进行替换,这样就可以将两行并做一行。但是怎么将所有行并作一行呢?可以采用sed的跳转功能。:a 在代码开始处设置一个标记a,在代码执行到结尾处时利用跳转命令t a重新跳转到标号a处,重新执行代码,这样就可以递归的将所有行合并成一行。

3. cat file | xargs

    xargs reads argu-

    ments from the standard input, delimited by blanks (which can be pro-

    tected with double or single quotes or a backslash) or newlines

将file中的内容作为参数传给X程序

    如果用echo作为X程序,则命令为:

    cat file | xargs echo

    此命令和cat file | xargs 行为一致,因为xargs的默认行为就是打印输出。

#计算一列数字

用awk命令计算文件中某一列的总和:

awk 'BEGIN{sum=0}{sum+=$1}END{print sum}' data.txt

比较完整的一个例子:

awk -F ',' 'BEGIN{sum=0 ;count=0}{if ($(NF-11) == 2 && $NF == 0 && $3 == "1.6.1_1_1") {sum +=$5; count++;} } END {print "sum="sum" count="count " avg="sum/count}'

说明:

BEGIN{sum=0 ;count=0} 初始化计数器;

END {print "sum="sum" count="count " avg="sum/count} 打印汇总,计数器 和均值;

if ($(NF-11) == 2 && $NF == 0 && $3 == "1.6.1_1_1") {sum +=$5; count++;} 判断倒数第11个字段,判断倒数第一个字段,判断第三个字段(字符串) 第五个字段汇总累加,计数器累加