sed本身是管线命令,可以分析standard input,可以将数据进行取代,删除,新增,撷取特定行等.
sed [-nefr] [action]
- -n :使用 silent模式,只打印符合规则的行
- -e :顺序执行多个动作
- -f :直接将sed的动作写在一个文件内,-f filename 则可以执行filename内的sed动作.
- -r :sed的动作支持的是延伸型正则表达式的语法.
- -i :直接修改读取的文件内容而不是由屏幕输出.
action说明
[n1 [,n2]] function
- n1,n2 :不一定存在,一般代表选择进行动作的行范围
function 说明
- a :新增,a后接字串,这些字串会在目前行的下一行(新增)出现
- c :取代,c后接字串,可以取代n1,n2之间的行
- d :删除.不接东西.
- i :插入,后接字串,在目前的上一行出现(新增).
- s :取代.
'sed s/要被取代的字符串/新的字符串/g'
举点例子
- 删除//及之后的注释
➜ ~ cat code.txt
abc //gaegage
def //barehah
vgf
➜ ~ sed 's/\/\/.*//' code.txt
abc
def
vgf
- 使用&符号在特定内容后附加内容
# 在beautiful后面附加 !
➜ ~ cat garden.txt
the blue sky is beautiful
the dark night is charming
➜ ~ sed 's/beautiful/&!/' garden.txt
the blue sky is beautiful!
the dark night is charming
- ()实现多个捕获组
# 捕获dog-mouse的内容并保留dog和mouse
➜ ~ cat animals.txt
dog cat fox mouse pig
➜ ~ sed 's/\(d.*g\).*\(m.*e\)/\1 \2/' animals.txt
dog mouse pig
- 执行多个操作
➜ ~ cat house.txt
1 bighouse
2 smallhouse
3 tinyhouse
4 gianthouse
➜ ~ sed -e 's/house/home/' -e 's/home/building/' house.txt
1 bigbuilding
2 smallbuilding
3 tinybuilding
4 giantbuilding
awk
行处理命令,默认以空格为分界将一行分为多个项.
awk '条件类型1{动作1} 条件类型2{动作2}...' filename
例如
last -n 5 |awk '{print $1 "\t" $3}'
wang :0
reboot boot
wang :0
reboot boot
wang :0
wtmp Thu
0代表整行
awk内置变量
变量名称 | 代表意义 |
---|---|
NF | 每一行 ($0) 拥有的字段总数 |
NR | 目前 awk 所处理的是“第几行”数据 |
FS | 目前的分隔字符,默认是空白键 |
例如
last -n 5 | awk '{print $1 "\t lines: " NR "\t columes" NF}'
wang lines: 1 columes11
reboot lines: 2 columes10
wang lines: 3 columes10
reboot lines: 4 columes10
wang lines: 5 columes10
lines: 6 columes0
wtmp lines: 7 columes7
awk关键字
如果需要设置awk变量,可以使用BEGIN和END
例如
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3} '
root 0
daemon 1
bin 2
sys 3
sync 4
games 5
man 6
lp 7
mail 8
news 9
diff 文件比对.以行为单位.
diff [-bBi] source dest
- -b : 忽略一行中,仅有多个空白的差异
- -B : 忽略空白行的差异
- -i : 忽略大小写的不同
cut -[bcdf] filename 从文件中提取所需信息的利器
参数说明
- -b 以字节制定
cmp 以字节比较.
cmp [-l] file1 file2
- -l 将所有不同点的字节处都列出来,默认只会输出第一个发现的不同点
这个基本不会用到,就不再写了
patch
补丁文件
patch -pN < patchfile
patch -R -pN < patchfile
- -p : 后接代表"取消几层目录"的意思
- -R : 代表还原,将亲的文件还原成原来旧的版本
- printf 可以通过一些特殊符号来将数据进行格式化输出;
- awk 可以使用“字段”为依据,进行数据的重新整理与输出;
- 文件的比对中,可利用 diff 及 cmp 进行比对,其中 diff 主要用在纯文本方面的新旧版本
比对 - patch 指令可以将旧版数据更新到新版 (主要亦由 diff 创建 patch 的补丁来源文件)
sed命令_Linux sed命令:替换、删除、更新文件中的内容 (biancheng.net)
grep命令_Linux grep命令:文本搜索工具(可使用正则表达式) (biancheng.net)
awk命令_Linux awk 命令用法详解:文本和数据进行处理的编程语言 (linuxde.net)