龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

Linux Shell 文本处理工具集锦(3)

时间:2014-05-21 15:13来源:网络整理 作者:网络 点击:
分享到:
代码如下: seg 's/text/replace_text/' file //替换每一行的第一处匹配的text 全局替换 代码如下: seg 's/text/replace_text/g' file 默认替换后,输出替换后的内容,如果需


代码如下:
seg 's/text/replace_text/' file //替换每一行的第一处匹配的text

•全局替换


代码如下:
seg 's/text/replace_text/g' file

默认替换后,输出替换后的内容,如果需要直接替换原文件,使用-i:

代码如下:
seg -i 's/text/repalce_text/g' file

•移除空白行:

代码如下:
sed '/^$/d' file

•变量转换
已匹配的字符串通过标记&来引用


代码如下:

echo this is en example | seg 's/\w+/[&]/g'
$>[this] [is] [en] [example]

•子串匹配标记
第一个匹配的括号内容使用标记 \1 来引用

代码如下:
sed 's/hello\([0-9]\)/\1/'

•双引号求值
sed通常用单引号来引用;也可使用双引号,使用双引号后,双引号会对表达式求值:


代码如下:
sed 's/$var/HLLOE/'

当使用双引号时,我们可以在sed样式和替换字符串中指定变量;


代码如下:

eg:
p=patten
r=replaced
echo "line con a patten" | sed "s/$p/$r/g"
$>line con a replaced

•其它示例
字符串插入字符:将文本中每行内容(PEKSHA) 转换为 PEK/SHA

代码如下:
sed 's/^.\{3\}/&\//g' file

awk 数据流处理工具

•awk脚本结构

awk ‘ BEGIN{ statements } statements2 END{ statements } ‘

•工作方式

1.执行begin中语句块;
2.从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;
3.执行end语句块;

print 打印当前行

•使用不带参数的print时,会打印当前行;

代码如下:
echo -e "line1\nline2" | awk 'BEGIN{print "start"} {print } END{ print "End" }'

•print 以逗号分割时,参数以空格定界;


代码如下:

echo | awk ' {var1 = "v1" ; var2 = "V2"; var3="v3"; \
print var1, var2 , var3; }'
$>v1 V2 v3

•使用-拼接符的方式(”"作为拼接符);


代码如下:

echo | awk ' {var1 = "v1" ; var2 = "V2"; var3="v3"; \
print var1"-"var2"-"var3; }'
$>v1-V2-v3

特殊变量: NR NF $0 $1 $2

NR:表示记录数量,在执行过程中对应当前行号;
NF:表示字段数量,在执行过程总对应当前行的字段数;
$0:这个变量包含执行过程中当前行的文本内容;
$1:第一个字段的文本内容;
$2:第二个字段的文本内容;


代码如下:
echo -e "line1 f2 f3\n line2 \n line 3" | awk '{print NR":"$0"-"$1"-"$2}'

•打印每一行的第二和第三个字段:

代码如下:
awk '{print $2, $3}' file

•统计文件的行数:

代码如下:
awk ' END {print NR}' file

•累加每一行的第一个字段:


代码如下:

echo -e "1\n 2\n 3\n 4\n" | awk 'BEGIN{num = 0 ;
print "begin";} {sum += $1;} END {print "=="; print sum }'

传递外部变量


代码如下:

var=1000
echo | awk '{print vara}' vara=$var # 输入来自stdin
awk '{print vara}' vara=$var file # 输入来自文件

用样式对awk处理的行进行过滤

精彩图集

赞助商链接